如何在正则表达式中使用regex变量?

2024-07-04 07:41:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用以下模式清理一段文本(将匹配项替换为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.escapeformat字符串,但它们在我的情况下都不起作用。你知道吗

Edit: I removed the input output text because I thought it is a little confusing. However, I thank @DYZ for the good suggestion.


Tags: 字符串text文本reforstring模式rel
1条回答
网友
1楼 · 发布于 2024-07-04 07:41:44

建议:不要弄乱复杂的字符串语法,而是将字符串转换为Python列表。你知道吗

import ast
l = ast.literal_eval("[" + s.replace("}", "],").replace("{", "[") + "]")
#[[[[['I'], 'PRP'], 'NP'], [[[[['did'], 'VBD'], [['not'], 'RB'], 'VP'],
#  ..., 'S'], '']

现在可以对数据应用简单的列表函数,完成后,将列表转换为带括号的字符串。你知道吗

相关问题 更多 >

    热门问题