我看到很多措辞相似的问题,但是我很难想出这个语法。
给定一个单词列表,我想打印所有没有特殊字符的单词。
我有一个正则表达式,可以识别带有特殊字符的单词\w*[\u00C0-\u01DA']\w*。我已经看到很多答案都带有相当简单的场景,比如一个简单的 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']
Run Code Online (Sandbox Code Playgroud)
当然,您也可以添加数字或其他任何您想要匹配的内容。
至于负前瞻,它们使用语法(?!...), with ?before !,并且它们必须在括号中。要在此处使用,您可以使用:
r"\b(?!\w*[À-?])\w*"
Run Code Online (Sandbox Code Playgroud)
这个:
\b,如空格或输入字符串的开头。\w*因为(?![À-?])只会检查特殊字符是单词中的第一个字母。演示。请注意,在 regex101.com 中,您必须指定 Python 风格\b才能正确处理特殊字符。
还有第三种选择:
r"\b[^À-?\s]*\b"
Run Code Online (Sandbox Code Playgroud)
中间部分[^À-?\s]*表示无限次匹配除特殊字符或空格以外的任何字符。
| 归档时间: |
|
| 查看次数: |
137 次 |
| 最近记录: |