Python正则表达式:除了撇号之外,去除转义字符和标点符号

4

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

"aaa\n\t\n asd123asd water's tap413 water blooe's"

如何使用正则表达式去除所有转义字符、数字和标点符号,但保留撇号?
我对正则表达式还不太熟悉,如果正则表达式比较复杂,请您解释一下每个表达式的含义。

请定义您所说的“转义字符”。 - Jan
@Jan \n \t \r .... - Eric Kim
2
@EricKim 你看过 Python 的正则表达式模块 re 的页面了吗?(https://docs.python.org/3/library/re.html)那里解释得非常清楚,我在做正则表达式相关的工作时都会用它作为参考文档。 - Gunee
3个回答

9
您正在寻找一种搜索和替换方法,Python中应该使用re#sub()
只需用''(空)替换非字母和撇号([^a-zA-Z' ]+)即可。
- 那转义字符呢?
答:当在字符串内部时,它们将变成单个字符,例如,\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字符串的斜杠进行编译,这将变成一个\\,这就是您在正则表达式中匹配反斜杠的方法)。
  • . - 匹配除换行符以外的任何字符。
  • | - 或表达式,可以匹配前面或后面的内容。
  • [^...] - 必须不是这些字符之一(在括号内)。
  • a-zA-Z'  - 匹配从az,从AZ' 的字符。
  • + - 量词,虽然在此处不是必需的,但有助于减少匹配次数,从而减少执行时间(它将被翻译为“在后面的项中出现一次或多次”)。

1
import re
snt="aaa\n\t\n asd123asd water's tap413 water blooe's"
"".join(re.findall("[^\n\t\d:.,]+",snt))

-1

我不确定你具体浏览的是什么,但是((\\n|\\t|\.|\ |\,|\;)+)+可以选择你的规范...在regexr.com中尝试你自己的正则表达式。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接