值得注意的是,一旦找到匹配项,正则表达式引擎就会立即停止搜索。然后,订单在某些情况下很重要,因为它不会继续检查替换中的其余选项
本正则表达式的目的由两部分组成:
(^\d*\b )(?!(ELEMENTARY|SECONDARY|KINDER))
10 st
这样的字符串变为10st
,但是像abcdefg238947 th
这样的字符串不会改变。相应的正则表达式是
以下:
(?<=[0-9])\s+(?=(?:ST|[RN]D|TH)(?: +[^\W\d_]|$))
把这两者加起来,问题就来了。我知道如果我首先设置第二条规则,那么引擎将成功并继续解析:text= re.sub(r'(?<=[0-9])\s+(?=(?:ST|[RN]D|TH)(?: +[^\W\d_]|$))|(^\d*\b )(?!(ELEMENTARY|SECONDARY|KINDER))',
'',
'1 ST KINDER',
0,
re.IGNORECASE)
有了以下字符串,引擎应该一起设置1
和ST
。那么在KINDER之前有1ST
不应该符合第二条规则,但情况并非如此:
1 ST KINDER --> ST KINDER
更多示例:
10306 KINDER (OK)
12345 ABC (OK)
1 ST KINDER (SHOULD BE 1ST KINDER)
1 AB KINDER (OK)
我如何在同一个regex语句中交替设置这两个规则,如果是序数,则优先将数字和字母放在一起,然后在开头检查数字
我希望有如下相同的行为:
text= re.sub(r'^\d+\b(?!\s+(?:ELEMENTARY|SECONDARY|KINDER))',
'',
re.sub(r'(?<=[0-9])\s+(?=(?:ST|[RN]D|TH)(?: +[^\W\d_]|$))',
'',
'1 ST KINDER',
0,
re.IGNORECASE),
0,
re.IGNORECASE)
目前没有回答
相关问题 更多 >
编程相关推荐