正则表达式:相当于 Python 中任何字母的 \d?

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

正则表达式中的字母是否有与 \d 等效的字符?例如,如果尝试查找

"(111) 111-1111"
形式的数字数字模式,则此代码有效:

pattern = re.compile(r'(\(\d\d\d) (\d\d\d\-\d\d\d)')

但是如果模式数字是字母而不是数字,您将如何重写这段代码?换句话说,如何更改上面的代码,使其能够匹配模式

"(abc) efg-hijk"
的字母?

python regex
3个回答
4
投票

尝试以下操作:

pattern = re.compile(r'(\([a-zA-Z]{3}\)) ([a-zA-Z]{3}-[a-zA-Z]{3})')

您可以在此处查看说明,并实时编辑和测试它。


3
投票
首先,您必须确定“字母”的实际含义,因为 Unicode 中的字母比英文版拉丁字母表中的字母多得多。

如果您只想要英文的,就像

[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

 减轻一点痛苦。


0
投票
这是 Mark Reed 的答案的代码示例,用于查找字母组合,包括带重音符号的字母。

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 中验证

© www.soinside.com 2019 - 2024. All rights reserved.