正则表达式中的字母是否有与 \d 等效的字符?例如,如果尝试查找
"(111) 111-1111"
形式的数字数字模式,则此代码有效:
pattern = re.compile(r'(\(\d\d\d) (\d\d\d\-\d\d\d)')
但是如果模式数字是字母而不是数字,您将如何重写这段代码?换句话说,如何更改上面的代码,使其能够匹配模式
"(abc) efg-hijk"
的字母?
如果您只想要英文的,就像
[A-Za-z]
一样简单,但没有
\
快捷方式。如果您在Python中使用
regex
模块而不是
re
模块,则可以直接使用Unicode元数据并询问具有给定属性的任何字符。在这种情况下,
\p{Letter}
就可以了。不过,您必须先安装
regex
,例如使用
pip install regex
。另请注意,您可以使用
{m,n}
量词语法来匹配多个正则表达式,而无需重复它;你的例子可以写成:
pattern = re.compile(r'(\(\d{3}) (\d{3}-\d{3}')
这应该可以使用更长时间的东西来代替
\d
减轻一点痛苦。
import regex
pattern = regex.compile(r'\p{L}{3} \p{L}{3}-\p{L}{4}')
matches = pattern.findall("ábç déf-ghíj")
print(matches) # Output: ['ábç déf-ghíj']
来源:直接来自 ChatGPT,在 Python 中验证