Python正则表达式的Python版本?

时间:2016-09-17 18:42:08

标签: python regex

我是一名Java开发人员,也是Python的新手。我想定义一个正则表达式接受所有字母字符,除了其中一些字符。我想只排除元音和字符' y',不管是大写还是小写。

Java中的正则表达式如下:

 "[a-zA-Z&&[^aeiouyAEIOUY]]"

我如何(重新)在Python中定义它?显然,上述内容对Python不起作用。而且我也 NOT 喜欢以下建议模式:

"[bcdfghjklmnpqrstvwxzBCDFGHJKLMNPQRSTVWXZ]"

3 个答案:

答案 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])"