[英]Inverse regex match on group in Python
我看到很多措辞相似的问题,但我在想出这个语法时遇到了惊人的困难。
给定一个单词列表,我想打印所有没有特殊字符的单词。
我有一个正则表达式,它标识带有特殊字符\\w*[\À-\ǚ']\\w*
。 我已经看到很多答案都带有相当简单的场景,比如一个简单的 word 。 但是,我找不到任何否定组的东西 - 我已经看到了几组不同的语法来包含否定前瞻?!
,但我一直无法想出一种适用于它的语法。
在我的情况下,给出一个字符串,如:“应该打印 nŌt thìs”
应该打印should
和print
但不是其他两个词。 re.findall("(\\w*[\À-\ǚ']\\w*)", paragraph.text)
为您提供特殊字符 - 我只是想反转它。
对于这种特殊情况,您只需在搜索中指定常规字母范围:
a = "should print nŌt thìs"
re.findall(r"(\b[A-Za-z]+\b)", a)
# ['should', 'print']
当然,您也可以添加数字或其他任何您想要匹配的内容。
至于负前瞻,它们使用语法(?!...)
, ?
之前!
,并且它们必须在括号中。 要在此处使用,您可以使用:
r"\b(?!\w*[À-ǚ])\w*"
这:
\\b
,例如空格或输入字符串的开头。\\w*
因为(?![À-ǚ])
只会检查特殊字符是否是单词中的第一个字母。 演示。 请注意,在 regex101.com 中,您必须为\\b
指定 Python 风格才能正常处理特殊字符。
还有第三种选择:
r"\b[^À-ǚ\s]*\b"
中间部分[^À-ǚ\\s]*
表示无限次匹配除特殊字符或空格以外的任何字符。
我知道这不是正则表达式,而只是一个完全不同的想法,除了使用正则表达式之外,您可能还没有。 我想它也会慢得多,但我认为它有效:
>>> import unicodedata as ud
>>> [word for word in ['Cá', 'Lá', 'Aqui']\
if any(['WITH' in ud.name(letter) for letter in word])]
['Cá', 'Lá']
或使用... 'WITH' not in
反转。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.