繁体   English   中英

正则表达式python非字母数字字符

[英]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#  %!'

我建议你做两遍:

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

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

您已经说过,您只想在后面有字母数字的情况下删除不良字符。 您可以为此使用零宽度的超前查询:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM