我使用以下模式清理一段文本(将匹配项替换为null):
{\s{\s\"[A-Za-z0-9.,\-:]*(?<!\bbecause\b)(?<!\bsince\b)\"\s}\s\"[A-Za-z0-9.,\-:]*\"\s}
我有一个像“因为”和“因为”这样的关系表,每次都会改变。所以我创建了一个单独的字符串,它本身就是一个正则表达式,比如:
lookahead_string = (?<!\bbecause\b)(?<!\bsince\b)
把它放在我原来的正则表达式模式中,然后像下面这样修改它:
{\s{\s\"[A-Za-z0-9.,\-:]*'+lookahead_string+r'\"\s}\s\"[A-Za-z0-9.,\-:]*\"\s}
但是新模式与输入文本中可以使用原始regex模式匹配的部分不匹配。我使用的代码是:
lookahead_string = ''
relators = ["because", "since"]
for rel in relators:
lookahead_string += '(?<!\b'+rel+'\b)'
text = re.sub(r'{\s{\s\"[A-Za-z0-9.,\-:]*'+lookahead_string+r'\"\s}\s\"[A-Za-z0-9.,\-:]*\"\s}', "", text)
text = ' '.join(text.split())
我该怎么做才能成功?!我已经尝试过使用re.escape
和format
字符串,但它们在我的情况下都不起作用。你知道吗
Edit: I removed the input output text because I thought it is a little confusing. However, I thank @DYZ for the good suggestion.
建议:不要弄乱复杂的字符串语法,而是将字符串转换为Python列表。你知道吗
现在可以对数据应用简单的列表函数,完成后,将列表转换为带括号的字符串。你知道吗
相关问题 更多 >
编程相关推荐