【问题标题】: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"

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

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

【问题讨论】:

  • 请定义“转义字符”的含义。
  • @Jan \n \t \r ....
  • @EricKim 你看过负责正则表达式的re 模块的python 页面吗? (docs.python.org/3/library/re.html) 那里解释得很好,当我做正则表达式的时候,我用它作为我的首选文档。

标签: 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'  - 匹配从 azAZ'  的字符。
  • + - 量词,这里不需要,但可以很好地减少匹配,从而减少执行时间(这将翻译为“一个或多个后面的术语出现”)。

【讨论】:

    【解决方案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 中尝试您自己的正则表达式

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-07-07
        • 2012-01-31
        • 2017-03-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-11
        相关资源
        最近更新 更多