正则表达式查找包含子字符串但不以同一子字符串结尾的字符串

我正在尝试编写一个正则表达式来检查字符串是否包含子字符串“ing”,但它大多数不会以“ing”结尾。

所以“唱”这个词不行,但“歌手”可以。

我想我已经弄清楚如何确保字符串不以 ing 结尾,因为我正在使用

(!<?(ing))$

但当我希望这个词也包含“ing”时,我似乎无法让它工作。我在想类似的事情

(\w+(ing))(!<?(ing))$

但这是行不通的,我的所有解决方案都将包含多个单词。所以它将匹配歌手但不匹配歌手制作,它仍然应该匹配这里的歌手,只是不匹配制作。


潇潇雨雨
浏览 164回答 3
3回答

慕姐8265434

您可以使用以下模式:ing(?=\w)这仅适用于包含whiching且后跟另一个单词字符的单词。这是一个例子:inp = 'singer'if re.search(r'ing(?=\w)', inp):&nbsp; &nbsp; print('singer is a MATCH')inp = 'sing'if re.search(r'ing(?=\w)', inp):&nbsp; &nbsp; print('sing is a MATCH')这打印:singer is a MATCH编辑:要匹配包含非终结符的整个单词ing,我建议使用re.findall:inp = "Madonna is a singer who likes to sing."matches = re.findall(r'\b\w*ing\w+\b', inp)print(matches)&nbsp; &nbsp; # prints ['singer']

DIEA

如果单词不能以 ing 结尾但必须包含 ing:\b\w*ing(?!\w*ing\b)\w+解释\b一个字边界\w*匹配0+单词字符ing匹配所需的ing(?!\w*ing\b)否定前瞻,断言 theing不在单词末尾\w+匹配 1+ 个单词字符,因此后面必须至少有一个字符正则表达式演示|&nbsp;Python演示例如import reitems = ["singer","singing","ing","This is a ing testing singalong"]pattern = r"\b\w*ing(?!\w*ing$)\w+\b"for item in items:&nbsp; &nbsp; result = re.findall(pattern, item)&nbsp; &nbsp; if result:&nbsp; &nbsp; &nbsp; &nbsp; print(result)输出['singer']['singalong']

回首忆惘然

您可以使用此模式:import repattern = re.compile('\w*ing\w+')print(pattern.match('sing'))&nbsp; # No matchprint(pattern.match('singer')) # Match
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python