正则表达式:替换单词后的拉丁数字

2024-04-26 04:16:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这样一个文本:it's level I, not level II or level III.

我希望后一级变成1,并且只在第一级

我尝试了以下代码:text = re.sub(r'(level I)+[\s,.]',r'level 1 ',text)

但是我的输出是这样的:it's level 1 not level II or level III.

逗号被跳过了,我不希望它被忽略。在某些情况下也是如此

我有Level这个词,而不是Level


1条回答
网友
1楼 · 发布于 2024-04-26 04:16:10

你可以用

import re
text = "it's level I, not level II or level III. It's Level I, not Level II or Level III."
print(re.sub(r'\b([lL]evel\s+)I\b', r'\g<1>1', text))
# => it's level 1, not level II or level III. It's Level 1, not Level II or Level III.
print(re.sub(r'(?<=\b[lL]evel )I\b', '1', text))
# => it's level 1, not level II or level III. It's Level 1, not Level II or Level III.

Python demo

注释

  • \b([lL]evel\s+)I\b-匹配一个整词level,后跟一个或多个空格,然后匹配一个整词I(由于单词边界),并替换为对组值的反向引用(\g<1>是一种明确的反向引用语法,因为此处使用的下一个字符是数字)
  • (?<=\b[lL]evel )I\b-匹配紧跟在整词{}和空格前面的位置,然后将I作为整词匹配

注意2:您也可以使用r'\b((?i:level)\s+)I\b'r'(?<=\b(?i:level) )I\b'以完全不区分大小写的方式匹配level

相关问题 更多 >