【问题标题】:regular expressions in python need to retain special characterspython中的正则表达式需要保留特殊字符
【发布时间】:2018-02-02 13:23:27
【问题描述】:

下面是我不干净的文本字符串

text = 'this/r/n/r/nis a non-U.S disclosures/n/n/r/r analysis agreements disclaimer./r/n/n/nPlease keep it confidential' 

下面是我正在使用的正则表达式:

 ' '.join(re.findall(r'\b(\w+)\b', text))

我的输出是:

'this is a non US disclosures analysis agreements disclaimer. Please keep it confidential'

我的预期输出是:

 'this is a non-U.S disclosures analysis agreements disclaimer. Please keep it confidential'

我需要保留特殊字符和单词之间的空格,应该正好有一个空格。谁能帮我改变我的正则表达式?

【问题讨论】:

  • 你能提供一个有效的 Python 字符串文字吗?您发布的内容将引发 SyntaxError。
  • 更改了字符串文字
  • 里面的'/r/n/n' 是这样的还是像'\r\n\n' 这样的换行符和回车?
  • 我不相信您的正则表达式会丢弃标点符号(您的“输出”),也不会神奇地添加一些(您的“预期输出”)。
  • 你们是在坚持细节,而不是回答我认为很清楚的问题

标签: python regex


【解决方案1】:

希望这对你有用!

str = 'this/r/n/r/nis a non-U.S.披露/n/n/r/r 分析协议免责声明。/r/n/n/n请保密'

val = re.sub(r'(/.?)', " ", str); val1 = re.sub(r'\s+', " ", val) 打印(val1)

【讨论】:

    【解决方案2】:

    使用比 \b 更具体的词屏障(标记字符串结尾的 $ 不能放在方括号内,因此您必须在 $|\n|\r| 和 ?=是一个非消耗性的前瞻性,很像 \b),这里也更安全的是使用非贪婪非空累加器(+ 号使其非空,问号使其非贪婪):

    re.findall(r'[^\n\r ]+?(?=$|\n|\r| )', text)
    

    ['this', 'is', 'a', 'non-U.S.', 'disclosures', 'analysis', “协议”、“免责声明”、“请”、“保留”、“它”、 '机密']

    【讨论】:

    • 如果我的文本有 \t \xa0 会发生什么上面的正则表达式会起作用吗? text = 'this/r/n/r/nis 是非美国披露\t \xao 分析协议免责声明。/t请保密'
    • 如果您询问分隔符和特殊字符集的每个子集是否都有快捷方式,那么答案是否定的。至于你的 \xa0 字符,转换为 utf stackoverflow.com/a/11566398/374437
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多