【问题标题】:regex python non alpha num characters正则表达式 python 非字母数字字符
【发布时间】:2018-11-25 14:45:56
【问题描述】:

我有如下字符串(目的是在 alpha num 字符之间去掉非字母字符,字符串末尾除外)

字符串:This$#is% Matrix# %!

我想要什么:This is Matrix# %!

所以我只想在中间去掉非字母数字,而不是最后。

我尝试了这个正则表达式代码str1 = re.sub(r'([^\s\w]|_)+', ' ', str1),但它去掉了所有非alp,包括最后一个。

我该如何解决这个棘手的问题

【问题讨论】:

  • 找到最后一个字母数字字符的索引i,并将正则表达式从索引0应用到i

标签: python regex


【解决方案1】:

您可以使用否定的前瞻断言。

>>> s = "This$#is% Matrix#  %!"
>>> re.sub(r'([^\s\w]|_)+(?![^\w]*$)', ' ', s)
'This is  Matrix#  %!'

【讨论】:

    【解决方案2】:

    我建议你通过两次:

    1. 用空格替换一堆“坏”字符。

    2. 用一个空格替换一堆空格。

    您说过您只想在后面有字母数字时删除坏字符。您可以为此使用零宽度前瞻:

    bad_chars = r'([^\s\w]|_)+(?=\s*\w)'
    

    (?=...)positive lookahead,,它向前看以查看模式 \s*\w 是否与当前位置匹配,但 向前移动- 它只是看起来。

    然后用空格替换,折叠空格,就大功告成了:

    re.sub(bad_chars, ' ', mystring)
    re.sub('\s\s+', ' ', mystring)
    print(mystring)
    

    【讨论】:

      【解决方案3】:

      您好,我觉得我的问题仍未得到解答,正如您在下面的输出中所见,我只希望将 2 个 alpha 字符之间的非 alpha 数字替换为 1 个空格,矩阵之后的部分应保持不变它不在字母字符之间。

      Inout string This$#is% Matrix#(这里有2个空格)%!

      您的输出(标准输出) 这是矩阵#(这里有 1 个空格)%!

      预期输出下载 这是矩阵#(此处为 2 个空格)%!

      【讨论】:

        猜你喜欢
        • 2013-01-06
        • 1970-01-01
        • 1970-01-01
        • 2014-05-24
        • 2017-04-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-01
        相关资源
        最近更新 更多