You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 11:50:46