regex 设置正则表达式模式,以根据a)之前或之后的字符来决定在a)之前或之后放置或删除空格

tvz2xvvm  于 2023-02-05  发布在  其他
关注(0)|答案(2)|浏览(92)
import re

input_text = "((NOUN) )   ) de el auto rojizo, algo) ) )\n Luego ((PL_ADVB)dentro ((NOUN)de baúl ))abajo.) )."

input_text = input_text.replace(" )", ") ")

print(repr(input_text))

简单地使用.replace(" )", ") ")函数,我会得到这个糟糕的输出,因为它没有考虑使用regex模式的函数可能会进行的条件替换,例如使用re.sub( , ,input_text, flags = re.IGNORECASE)

'((NOUN))   )  de el auto rojizo, algo)) ) \n Luego ((PL_ADVB)dentro ((NOUN)de baúl) )abajo.)) .'

目标是得到这样的输出,其中,只要右括号)不在点.、换行符\n或行尾$之前,就去掉右括号中的前导空格,并在其后添加一个空格

'((NOUN))) de el auto rojizo, algo)))\n Luego ((PL_ADVB)dentro ((NOUN)de baúl))abajo.)).'
ghhkc1vu

ghhkc1vu1#

试试这个句型应该能解出来
/(\s*)())(\s*)(?=[^\s])/克
此模式将匹配后跟非空白字符的")“,并删除")”前后的所有空格。
如果要在")“周围添加空格而不是删除空格,可以按如下方式修改模式:
/(\s*)())(\s*)(?=[^\s])/克

ruarlubt

ruarlubt2#

只需使用以下简单的正则表达式去掉)前面的空格:

input_text = re.sub(r"\s*\)", ")", input_text)
print(repr(input_text))
'((NOUN))) de el auto rojizo, algo)))\n Luego ((PL_ADVB)dentro ((NOUN)de baúl))abajo.)).'

相关问题