【问题标题】:Find non-alphanumeric characters with alphanumeric character anywhere before在之前的任何位置查找具有字母数字字符的非字母数字字符
【发布时间】:2021-05-10 22:25:44
【问题描述】:

所以我正在编写一些代码,它需要一个字符串,例如 "This$#is% Matrix# %!"并删除所有在它们周围的某处都有字母数字符号的非字母数字符号。我设法做到了,但问题出在字符串上,在任何其他符号之前都有非字母数字符号。我想用“非固定长度”回顾来做到这一点,但这是不可能的。有什么解决方法吗? 代码和一些例子:

decodedString = re.sub(r"[^0-9,a-z,A-Z](?=.+[0-9,a-z,A-Z])", " ",decodedString)
print("1st regex: " + decodedString)
decodedString = re.sub(r" (?= .+[0-9,a-z,A-Z])", "", decodedString)
print("2nd regex: " + decodedString)

(第二个正则表达式删除连续两次的空格,但它也应该只删除它之前的字母数字字符)。

"# @i##U" 应该变成"# @i U",这个是唯一不工作的,因为它删除了开头的非字母数字字符(它返回"i #U")

“This%%is$Matrix%%$script”应该变成“This is Matrix script”

“这个$#是% 矩阵# %!”应该变成“这是矩阵# %!”

我们将不胜感激!

【问题讨论】:

    标签: python regex


    【解决方案1】:

    你可以使用

    re.sub(r'(?<=[^\W_])[\W_]+(?=[^\W_])', ' ', text)
    

    详情

    • (?&lt;=[^\W_]) - 字母或数字应紧邻左侧
    • [\W_]+ - 一个或多个非字母数字
    • (?=[^\W_]) - 字母或数字应立即在右侧。

    请参阅regex demo

    Python demo

    import re
    texts = ['This%%is$Matrix%%$script', 'This$#is% Matrix# %!']
    for text in texts:
        print(re.sub(r'(?<=[^\W_])[\W_]+(?=[^\W_])', ' ', text))
    

    输出:

    This is Matrix script
    This is Matrix# %!
    

    【讨论】:

    • 哇,这真的有效!非常感谢您的解释!
    猜你喜欢
    • 1970-01-01
    • 2014-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-22
    • 1970-01-01
    相关资源
    最近更新 更多