[英]regex python non alpha num characters
我有如下字符串(目的是摆脱字符串末尾的非字母字符之间的非字母字符)
字符串: This$#is% Matrix# %!
我想要的是: This is Matrix# %!
所以我只想摆脱非字母数字,而不是最后。
我尝试了此正则表达式代码, str1 = re.sub(r'([^\\s\\w]|_)+', ' ', str1)
但它摆脱了所有非alp的情况,包括末尾的一个。
我该如何解决这个棘手的问题
您可以使用否定的超前断言。
>>> s = "This$#is% Matrix# %!"
>>> re.sub(r'([^\s\w]|_)+(?![^\w]*$)', ' ', s)
'This is Matrix# %!'
我建议你做两遍:
用空格替换一堆“坏”字符。
用一个空格替换一堆空格。
您已经说过,您只想在后面有字母数字的情况下删除不良字符。 您可以为此使用零宽度的超前查询:
bad_chars = r'([^\s\w]|_)+(?=\s*\w)'
(?=...)
是一个正向的前瞻,它会向前看模式\\s*\\w
是否与当前位置匹配,但不会向前移动-它只是看起来。
然后用空格替换,折叠空格,然后完成:
re.sub(bad_chars, ' ', mystring)
re.sub('\s\s+', ' ', mystring)
print(mystring)
嗨,我觉得我的问题仍然没有得到回答,如下面的输出所示,我只希望将2个字母字符之间的非字母数字替换为1个空格,矩阵后的部分应保持不变,因为它不在字母字符。
输入字符串This $#is%Matrix#(此处为2个空格)%!
您的输出(stdout)这是Matrix#(此处为1个空格)%!
预期输出下载这是矩阵号(此处为2个空格)%!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.