如何在Python中修改与特定正则表达式匹配的文本?

阿维吉特

我需要在句子中标记否定上下文。该算法如下:

  1. 检测否定符(不/永远/永远/不要/等等)
  2. 检测结束标点的子句(。;:!!)
  3. 在此之间的所有单词中添加_NEG。

现在,我定义了一个正则表达式来挑选所有此类事件:

def replacenegation(text):
    match=re.search(r"((\b(never|no|nothing|nowhere|noone|none|not|havent|hasnt|hadnt|cant|couldnt|shouldnt|wont|wouldnt|dont|doesnt|didnt|isnt|arent|aint)\b)|\b\w+n't\b)((?![.:;!?]).)*[.:;!?\b]", text)
    if match:
        s=match.group()
        print s
        news=""
        wlist=re.split(r"[.:;!? ]" , s)
        wlist=wlist[1:]
        print wlist
        for w in wlist:
            if w:
                news=news+" "+w+"_NEG"
        print news

我可以检测并替换匹配的组。但是,我不知道该操作后如何重新创建完整的句子。同样对于多个匹配,match.groups()给我错误的输出。

例如,如果我的输入句子是:

I don't like you at all; I should not let you know my happiest secret.

输出应为:

I don't like_NEG you_NEG at_NEG all_NEG ; I should not let_NEG you_NEG know_NEG my_NEG happiest_NEG secret_NEG .

我该怎么做呢?

卡斯拉文

首先,您最好将(?![.:;!?]).)*否定的前瞻更改为否定的字符类。

([^.:;!?]*)

然后,您需要使用none捕获组,并为否定词删除多余的捕获组,因为您已将其围住3个捕获组,它将返回3个匹配的否定词,例如not那么您可以使用re.findall()查找所有匹配项:

>>> regex =re.compile(r"((?:never|no|nothing|nowhere|noone|none|not|havent|hasnt|hadnt|cant|couldnt|shouldnt|wont|wouldnt|dont|doesnt|didnt|isnt|arent|aint)\b|\b\w+n't\b)([^.:;!?]*)([.:;!?\b])")
>>> 
>>> regex.findall(s)
[("don't", ' like you at all', ';'), ('not', ' let you know my happiest secret', '.')]

或使用re.sublambda函数作为替换符来替换单词

>>> regex.sub(lambda x:x.group(1)+' '+' '.join([i+'_NEG' for i in x.group(2).split()])+x.group(3) ,s)
"I don't like_NEG you_NEG at_NEG all_NEG; I should not let_NEG you_NEG know_NEG my_NEG happiest_NEG secret_NEG."

请注意,要捕获标点符号,您也需要将其放入捕获组。然后,您可以re.sub()在编辑后将其添加到句子末尾

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在python中匹配正则表达式?

Python:在BeautifulSoup文本中匹配正则表达式

如何修改此正则表达式以使其与Python中的“&”不匹配?

如何使用正则表达式匹配特定文本中的^(d +)

如何在Javascript中匹配正则表达式

如何在Smalltalk正则表达式中匹配[

如何在正则表达式中匹配“ [”和“]”?

如何在正则表达式中匹配“或”内部?

如何在PHP中以这种模式匹配日期或正则表达式中的特定作品

如何在正则表达式中匹配特定于语言的字符?

如何在正则表达式中以特定字符开头的字符串匹配

如何在不包含特定前缀的 PCRE 正则表达式中匹配 URL

在正则表达式匹配中修改组

如何在匹配表达式中编写正则表达式文字?

如何修改正则表达式以仅匹配字符串中的特定数字?

如何在尝试与python中的正则表达式匹配时应付变音符号

如何在Python中获取匹配正则表达式的组名?

如何在Python正则表达式中实施贪婪匹配

如何在python 3中打印正则表达式匹配结果?

如何在python正则表达式中匹配双引号?

如何在Python中从正则表达式匹配和提取组?

如何在Python正则表达式匹配中处理多行模式

如何在Python中再次使用先前匹配的正则表达式?

如何在Python中用正则表达式中的函数替换匹配项

如何在python中仅突出显示匹配正则表达式的某些部分

如何在python中对正则表达式匹配结果执行求和

如何在python正则表达式中对日期匹配应用验证

正则表达式匹配标签内的特定文本

如何从正则表达式生成与正则表达式匹配的文本?