如何用Python移除多行字符串中以罗马数字开头的整行
移除多行字符串中以罗马数字开头的行的Python解决方案
问题说明
需求:移除多行字符串中以罗马数字开头的行。示例字符串如下:
I. LIFE.
I.
SUCCESS.
Success is counted sweetest
By those who ne'er succeed.
To comprehend a nec...尝试的代码未生效:
for line in xtemp.split('\n'): import re if line.strip("\n") != r"\b(?=[MDCLXVIΙ])M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})([IΙ]X|[IΙ]V|V?[IΙ]{0,3})\b.?" print(line)
错误分析
import re放在循环内部属于语法错误,必须将导入语句放在代码最开头- 直接用字符串不等于(
!=)判断正则表达式完全错误,正则匹配需要调用re模块的专用方法 strip("\n")无意义,split('\n')拆分后的行已不含换行符,处理前后空白应该用strip()
正确代码实现
import re # 定义匹配行首罗马数字的正则(支持罗马数字后带点、空格或直接结束) roman_start_pattern = re.compile(r'^\s*[MDCLXVIΙ]+(\.| |$)') # 示例输入字符串 xtemp = """I. LIFE. I. SUCCESS. Success is counted sweetest By those who ne'er succeed. To comprehend a nec...""" # 过滤掉以罗马数字开头的行 filtered_content = [line for line in xtemp.split('\n') if not roman_start_pattern.match(line)] # 输出处理后的结果 for line in filtered_content: print(line)
代码说明
- 正则表达式
^\s*[MDCLXVIΙ]+(\.| |$):^匹配行起始位置\s*匹配行首可能存在的空白字符[MDCLXVIΙ]+匹配一个或多个罗马数字字符(包含可能的全角I)(\.| |$)匹配罗马数字后的点、空格或行尾,覆盖示例中的两种罗马数字开头格式
- 通过列表推导式筛选出不匹配的行,实现移除目标行的效果
内容的提问来源于stack exchange,提问作者oops
相关产品推荐
相关产品推荐

