我是一名Java开发人员,也是Python的新手。我想定义一个正则表达式接受所有字母字符,除了其中一些字符。我想只排除元音和字符' y',不管是大写还是小写。
Java中的正则表达式如下:
"[a-zA-Z&&[^aeiouyAEIOUY]]"
我如何(重新)在Python中定义它?显然,上述内容对Python不起作用。而且我也 NOT 喜欢以下建议模式:
"[bcdfghjklmnpqrstvwxzBCDFGHJKLMNPQRSTVWXZ]"
答案 0 :(得分:2)
我不认为当前的python正则表达式模块具有您正在寻找的内容。最终替换regex
确实具有您所需要的,您可以根据需要进行安装。
除此之外,否定可能是一种方法。基本上,定义您不想要的所有字符,然后将其反转。听起来很麻烦,但“无字”速记(\W
)可以帮助我们。 \w
表示a-zA-Z0-9_
(对于ASCII匹配),\W
表示相反([^\w]
)。因此,[aeiouyAEIOUY\W\d_]
表示您不寻找的每个角色,因此[^aeiouyAEIOUY\W\d_]
表示您正在寻找的每个角色。例如
>>> import re
>>> s = "xyz_ d10 word"
>>> pattern = "[^aeiouyAEIOUY\W\d_]+"
>>> re.findall(pattern, s)
['x', 'z', 'd', 'w', 'rd']
如果您严格仅使用ASCII字符,则可以使用ASCII
标志。例如
>>> s = "Español"
>>> re.findall(pattern, s)
['sp', 'ñ', 'l']
>>> re.findall(pattern, s, re.ASCII)
['sp', 'l']
答案 1 :(得分:0)
与(?i)[b-df-hj-np-tv-xz]
或(?i)\w(?<![_aeiouy\d])
相同。测试here。
答案 2 :(得分:0)
(?= ...)积极前瞻断言。如果包含,则成功 正则表达式,由...表示,成功匹配 当前位置,否则失败。但是,一旦载入 已尝试表达式,匹配引擎根本没有前进; 在断言开始的地方尝试了其余的模式。
(?!...)否定前瞻声明。这与之相反 积极主张;如果包含的表达式没有,它会成功 匹配字符串中的当前位置。
r"(?![aeiouyAEIOUY])[a-zA-Z])"