import re
input_text = "a áshgdhSdah saasas a corrEr, assasass a saltó sasass a sdssaa" #example
list_verbs_in_this_input = ["serías", "serían", "sería", "ser", "es", "corré", "corrió", "corría", "correr", "saltó", "salta", "salto", "circularías", "circularía", "circulando", "circula", "consiste", "consistían", "consistía", "consistió", "ladró", "ladrando", "ladra", "visualizar", "ver", "vieron", "vió"]
noun_pattern = r"((?:\w+))" # pattern that doesnt tolerate whitespace in middle
imput_text = re.sub(r"(?:^|\s+)a\s+" + noun_pattern,
"\(\g<0>\)",
input_text, re.IGNORECASE)
print(repr(input_text)) # --> output
我需要使用类似于re.compile(r"(?:" + rf"({'|'.join(list_verbs_in_this_input)})" + r"|[.;\n]|$)", flags = re.IGNORECASE)
的正则表达式模式,使用该正则表达式来标识和替换"((?:\w+))"
之间不包含空格的子字符串(如果该子字符串位于行首或前面有“a”"(?:^|\s+)a\s+"
),前提是"((?:\w+))"
与列表list_verbs_in_this_input
或点.
中的任何字符串都不匹配
正确的输出应如下所示:
'(áshgdhSdah) saasas a corrEr, assasass a saltó sasass (sdssaa)'
请注意,子字符串"a corrEr"
和"a saltó"
未被修改,因为它们包含list_verbs_in_this_input
列表中的子字符串(单词
1条答案
按热度按时间bvn4nwqk1#
要排除某些单词,可以在要匹配的单词的开头使用否定的前瞻Assert。
需要更正的几件事:
re.sub
将标志作为第5个参数,而不是第4个参数"\("
不是转义序列,因此您应该直接执行"(\g<0>)"
,而不要“转义”括号--它们在该字符串中没有特殊含义。r"(?:^|\s+)a\s+"
将始终 * 要求 *a
在那里。从您的描述中,我了解到当单词位于行首时,a
可能是可选的,因此r"(?:\ba\s|^)\s*"
\b
。以下是您可以执行的操作: