如何使用Python正则表达式忽略大小写而不是变音符号?

问题描述 投票:0回答:1

我正在使用一组必须在目标文本中匹配的正则表达式模式。

我有问题的正则表达式是这样的:

(İ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 有没有办法让正则表达式忽略大小写但保持变音符号完整?

python regex python-re ignore-case python-regex
1个回答
0
投票

re
的文档指出:

re.I

re.IGNORECASE

执行不区分大小写的匹配;像 [A-Z] 这样的表达式也会匹配小写字母。除非使用

ASCII
标志来禁用非 ASCII 匹配,否则完整的 Unicode 匹配(例如 Ü 匹配 ü)也可以工作。当前区域设置不会更改此标志的效果,除非还使用了
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
© www.soinside.com 2019 - 2024. All rights reserved.