s_l = ["春天年初, ...","1999年", "很多年以前"]
for front_part in s_l:
    idx_year = re.search(r'[\d]*[年]{1}[初末底前]{0,1}',front_part).end() \
    if re.search(r'[\d]*[年]{1}[初末底前]{0,1}',front_part) else 0
    print(idx_year)

我想搜索包含的子字符串的idx,同时,在 or [初末底前](符号B)后面必须有数字(符号A)年例如,在s_l中,它应该返回4,5,0

一个划分正则表达式的 idea ,比如

re.search(r'[\d]+[年]{1}',front_part) or re.search(r'[年]{1}[初末底前]{0,1}',front_part)

但它太复杂了,另一个使用(?=...),但我不知道如何使用它,有什么建议吗?

推荐答案

可以使用lookback断言来匹配前面有数字的.使用交替模式匹配紧跟[初末底前]的模式:

pattern = re.compile(r'(?<=\d)年|年[初末底前]')
print([match.end() if match else 0 for match in map(pattern.search, s_l)])

这将产生:

[4, 5, 0]

Python相关问答推荐

删除任何仅包含字符(或不包含其他数字值的邮政编码)的观察

Vectorize多个头寸的止盈/止盈回溯测试pythonpandas

当从Docker的--env-file参数读取Python中的环境变量时,每个\n都会添加一个\'.如何没有额外的?

使用groupby Pandas的一些操作

如何请求使用Python将文件下载到带有登录名的门户网站?

如何在Raspberry Pi上检测USB并使用Python访问它?

python中的解释会在后台调用函数吗?

如何从需要点击/切换的网页中提取表格?

判断solve_ivp中的事件

如何使用两个关键函数来排序一个多索引框架?

为什么'if x is None:pass'比'x is None'单独使用更快?

在matplotlib中使用不同大小的标记顶部添加批注

如何在Great Table中处理inf和nans

没有内置pip模块的Python3.11--S在做什么?

在第一次调用时使用不同行为的re. sub的最佳方式

来自Airflow Connection的额外参数

如何提高Pandas DataFrame中随机列 Select 和分配的效率?

在不中断格式的情况下在文件的特定部分插入XML标签

来自任务调度程序的作为系统的Python文件

Pandas:根据系列词典中的值筛选行