替换 python 中括号之间的所有非字母数字异常



我想删除所有非字母数字字符,除了括号以及它们之间的字符在python中。

例如:

My son's birthday [[David | David Smith]] $$ (is) "today" 2019 ][

成为

My son s birthday [[David | David Smith]] is today 2019

这是我现在的函数:

def clean(texte):
return re.sub(r"[^0-9a-zA-Z]+", " ", texte).lower()

它像我想要的那样替换了所有非字母数字,但它替换了方括号和内部的管道。我不知道如何在 sub 方法中添加新的正则表达式并添加新条件。

而不是替换,您可以选择要继续使用交替进行的内容,以从[[匹配到]],或者|匹配1+次单词字符w+然后将部分连接回字符串。

[[[^]]+]]|w+

这将匹配

  • [[[^]]+]]使用否定字符类从[[]]匹配
  • |
  • w+匹配1+次单词字符

正则表达式演示 |蟒蛇演示

例如:

import re
regex = r"[[[^]]+]]|w+"
test_str = "My son's birthday [[David | David Smith]] $$ (is) "today" 2019 ]["
res = re.findall(regex, test_str)
print(' '.join(res))
# My son s birthday [[David | David Smith]] is today 2019
import re
x = "My son's birthday [[David | David Smith]] $$ (is) "today" 2019 ]["
def clean(texte):
return re.sub(r"[^[[[^]]+]]|w]+", " ", texte).lower()
print(clean(x))
>>> 'my son s birthday [[david | david smith]] is today 2019 ]['

然后,您可以拆分"]"并保留第一个索引。

最新更新