我正在使用一组必须在目标文本中匹配的正则表达式模式。
我有问题的正则表达式是这样的:
(İg)[[:punct:][:space:]]+[[:alnum:]]+
最初,我注意到Python的
re
包不支持像[:punct:]
这样的字符类。然后我发现使用 regex
库(而不是 re
),实际上会支持这些表单。
现在的问题是,使用
re
和 regex
时,启用 IGNORECASE
似乎也忽略了变音符号(我想考虑)。例如:
#import re
import regex as re
active_patterns = ["(İg)[[:punct:][:space:]]+[[:alnum:]]+"]
text = "A big problem"
for pattern in active_patterns:
compiled_pattern = re.compile(pattern, re.IGNORECASE)
for match in compiled_pattern.finditer(text):
print(match)
在这段代码中,我想忽略大小写,但不想忽略变音符号。然而,当启用
regex
时,IGNORECASE
库似乎会忽略变音符号。事实上,这个片段将打印“ig Problem”。如果我删除不支持的部分,re
库也会发生相同的行为,因此使用正则表达式(İg)
。在这种情况下,它只会打印 ig
。
Python 有没有办法让正则表达式忽略大小写但保持变音符号完整?
re
的文档指出:
re.I
re.IGNORECASE
执行不区分大小写的匹配;像 [A-Z] 这样的表达式也会匹配小写字母。除非使用
标志来禁用非 ASCII 匹配,否则完整的 Unicode 匹配(例如 Ü 匹配 ü)也可以工作。当前区域设置不会更改此标志的效果,除非还使用了ASCII
标志。LOCALE
如果我复制粘贴您的图案,这就是我得到的:
import re
re1 = re.compile("İg", re.IGNORECASE)
print("-- with IGNORECASE:")
print(" ", re1.match("ig")) # <re.Match object ...
re2 = re.compile("İg", re.IGNORECASE|re.ASCII)
print("-- with IGNORECASE|ASCII:")
print(" ", re2.match("ig")) # None