我看到很多措辞相似的问题,但是我很难想出这个语法。
给定一个单词列表,我想打印所有没有特殊字符的单词。
我有一个正则表达式,可以识别带有特殊字符的单词 \w*[\u00C0-\u01DA']\w*
.我已经看到了很多类似 simple word 等相当简单的场景的答案。 .但是,我找不到任何否定组的内容 - 我已经看到了几组不同的语法来包含否定前瞻 ?!
,但我一直无法想出一种适用于它的语法。
在我的情况下,给出一个字符串,如:“应该打印 nŌt thìs”
应该打印 should
和 print
但不是其他两个词。 re.findall("(\w*[\u00C0-\u01DA']\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*
因为 (?![À-ǚ])
只会检查特殊字符是否是单词中的第一个字母。 Demo .请注意,在 regex101.com 中,您必须为
\b
指定 Python 风格使用特殊字符正常工作。还有第三种选择:
r"\b[^À-ǚ\s]*\b"
中间部分[^À-ǚ\s]*
表示无限次匹配除特殊字符或空格以外的任何字符。
关于python - Python中组的反向正则表达式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62827186/