使用正则表达式匹配带有特殊符号的多词表达式

2024-06-16 11:17:11 发布

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

最初我用

re.sub(r'\b({0})\b'.format(T[i]), 'TARGET', j, flags=re.IGNORECASE)

但有几句话处理得不好:

T[i] = '#dexter'

finally starting the 5th season of #dexter. see ya later, weekend!

以及

T[i] = 'a$ap rocky'

AHHH! My mom said yes for me to go the A$AP Rocky concert!! Nov 8th we out! #EXCITE

对于这两个实例,T[i]没有被“TARGET”替换为出现在第一个目标开头的标签符号和第二个目标中的美元符号。我也尝试过r'\S*({0})\S*',但仍然无法修复第二个实例。你能帮我指定相关的正则表达式吗?谢谢!你知道吗


Tags: ofthe实例reformattarget目标符号
1条回答
网友
1楼 · 发布于 2024-06-16 11:17:11

#dexter的问题

\b匹配单词边界,即序列两端与\w+匹配的空字符串。但是,#\w+不匹配,因此单词边界位于#右侧,而不是左侧。一种可能的解决方案是使用负lookaround而不是单词边界:

r'(?<!\w)({0})(?!\w)'

a$ap rocky的问题

$字符在正则表达式中有特殊的含义。在将输入字符串插入模式之前,应该对其进行预处理。^{}函数正是为此而设计的:

re.sub(r'\b({0})\b'.format(re.escape(T[i])), 'TARGET', j, flags=re.IGNORECASE)

把两者结合起来

re.sub(r'(?<!\w)({0})(?!\w)'.format(re.escape(T[i])), 'TARGET', j, flags=re.IGNORECASE)

相关问题 更多 >