【问题标题】:Only sub out non-alphanumeric characters in regex仅在正则表达式中分出非字母数字字符
【发布时间】:2018-10-22 22:33:44
【问题描述】:

我正在尝试使用 re.sub 从 Python 中的该字符串中删除符号:

re.sub(r"(?![a-z0-9])", "_", "some:long:str-:that:can't+have+symbols".lower())

我正在寻找的答案是:

some_long_str__that_can_t_have_symbols

但它不起作用。我绝对可以使用 findall() 然后 join() 匹配字母数字字符来创建一个新字符串,但这完全消除了该字符,所以我最终编写了一些低效的 for 循环。

我认为问题在于我如何否定我的表达。有什么想法吗?

【问题讨论】:

  • 试试这个[^a-z0-9]+
  • 你为什么要使用前瞻而不是仅仅匹配你想要的?

标签: regex regex-negation


【解决方案1】:

像这样使用:

import re
result = re.sub(r"([^a-z0-9])", "_", "some:long:str-:that:can't+have+symbols".lower())
print(result)

输出:

some_long_str__that_can_t_have_symbols

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-06
    • 2013-11-18
    • 1970-01-01
    • 1970-01-01
    • 2011-08-29
    • 2017-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多