python regex,删除除撇号外的转义字符和标点符号

Eri*_*Kim 4 python regex python-3.x

我有一个看起来像这样的字符串:

"aaa\n\t\n asd123asd water's tap413 water blooe's"
Run Code Online (Sandbox Code Playgroud)

如何使用正则表达式删除除撇号之外的所有转义字符、数字和标点符号?

我对正则表达式很陌生,如果您能解释每个表达式的含义,如果正则表达式公式很复杂,我将不胜感激

Mat*_*eus 7

您正在寻找一种搜索和替换方法,在 Python 中应该是re#sub().

只需将非字母和撇号 ( [^a-zA-Z' ]+) 替换为''(nothing)。

- 哦,那转义字符呢?
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)
Run Code Online (Sandbox Code Playgroud)

https://repl.it/repls/ReasonableUtterAnglerfish


如果您能解释每个表达式的含义,将不胜感激

所以,解释:

  • \\\\- 匹配一个反斜杠(为什么是四个?每一对都会为 Python 字符串的编译转义斜杠,这将变成 a \\which 你如何匹配正则表达式中的反斜杠)。
  • .- 匹配除换行符以外的任何字符
  • | - OR 表达式,匹配之前或之后的内容。
  • [^...]-不能是这些字符之一(内部)。
  • a-zA-Z' - 匹配从azAZ'或的字符 
  • + - 量词,这里不需要,但可以减少匹配,从而减少执行时间(这将翻译为“后面的术语出现一次或多次”)。