【问题标题】:python regex, remove escape characters and punctuation except for apostrophepython regex,删除转义字符和标点符号,撇号除外
【发布时间】:2018-05-13 15:57:08
【问题描述】:
我有一个如下所示的字符串:
"aaa\n\t\n asd123asd water's tap413 water blooe's"
如何使用正则表达式删除除撇号之外的所有转义字符、数字和标点符号?
我对正则表达式很陌生,如果你能解释每个表达式的含义,如果正则表达式公式很复杂,我将不胜感激
【问题讨论】:
标签:
python
regex
python-3.x
【解决方案1】:
您正在寻找一种搜索和替换方法,在 Python 中应该是 re#sub()。
只需将非字母和撇号 ([^a-zA-Z' ]+) 替换为 ''(无)。
- 哦,那么转义字符呢?
R:在字符串中它们会变成单个字符,例如\n会变成换行符,不是字母也不是'。
相反,如果您确实在字符串中转义了一个转义字符(例如:"abc\\nefg"),您应该在正则表达式的开头添加一个\\\\.|,它将匹配反斜杠+任何其他字符(所以它将是:\\\\.|[^a-zA-Z' ])
这是工作示例:
import re
s = "aaa\n\t\n asd123asd water's tap413 water blooe's"
replaced = re.sub("[^a-zA-Z' ]+", '', s)
print(replaced)
https://repl.it/repls/ReasonableUtterAnglerfish
如果您能解释每个表达式的含义,将不胜感激
所以,解释:
-
\\\\ - 匹配一个反斜杠(为什么是四个?每对都会转义斜杠以用于 Python 字符串的编译,这将变成一个 \\,这就是您在正则表达式中匹配反斜杠的方式)。
-
. - 匹配除换行符character以外的任何字符。
-
| - OR 表达式,匹配之前的内容或之后的内容。
-
[^...] - 必须不是这些字符之一(内部)。
-
a-zA-Z' - 匹配从 a 到 z、A 到 Z、' 或 的字符。
-
+ - 量词,这里不需要,但可以很好地减少匹配,从而减少执行时间(这将翻译为“一个或多个后面的术语出现”)。
【解决方案2】:
import re
snt="aaa\n\t\n asd123asd water's tap413 water blooe's"
"".join(re.findall("[^\n\t\d:.,]+",snt))
【解决方案3】:
我不确定您具体浏览什么,但((\\n|\\t|\.|\ |\,|\;)+)+ 可以选择您的规范...在regexr.com 中尝试您自己的正则表达式