为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

潇潇雨雨 2023-09-05 15:48:17
我正在尝试编写一个正则表达式来检查字符串是否包含子字符串“ing”,但它大多数不会以“ing”结尾。所以“唱”这个词不行,但“歌手”可以。我想我已经弄清楚如何确保字符串不以 ing 结尾,因为我正在使用(!<?(ing))$但当我希望这个词也包含“ing”时,我似乎无法让它工作。我在想类似的事情(\w+(ing))(!<?(ing))$但这是行不通的,我的所有解决方案都将包含多个单词。所以它将匹配歌手但不匹配歌手制作,它仍然应该匹配这里的歌手,只是不匹配制作。
查看完整描述

3 回答

?
慕姐8265434

TA贡献1813条经验 获得超2个赞

您可以使用以下模式:


ing(?=\w)

这仅适用于包含whiching且后跟另一个单词字符的单词。这是一个例子:


inp = 'singer'

if re.search(r'ing(?=\w)', inp):

    print('singer is a MATCH')


inp = 'sing'

if re.search(r'ing(?=\w)', inp):

    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)    # prints ['singer']


查看完整回答
反对 回复 2023-09-05
?
DIEA

TA贡献1820条经验 获得超2个赞

如果单词不能以 ing 结尾但必须包含 ing:

\b\w*ing(?!\w*ing\b)\w+

解释

  • \b一个字边界

  • \w*匹配0+单词字符

  • ing匹配所需的ing

  • (?!\w*ing\b)否定前瞻,断言 theing不在单词末尾

  • \w+匹配 1+ 个单词字符,因此后面必须至少有一个字符

正则表达式演示Python演示

例如

import re


items = ["singer","singing","ing","This is a ing testing singalong"]

pattern = r"\b\w*ing(?!\w*ing$)\w+\b"


for item in items:

    result = re.findall(pattern, item)

    if result:

        print(result)

输出


['singer']

['singalong']


查看完整回答
反对 回复 2023-09-05
?
回首忆惘然

TA贡献1847条经验 获得超11个赞

您可以使用此模式:


import re


pattern = re.compile('\w*ing\w+')

print(pattern.match('sing'))  # No match

print(pattern.match('singer')) # Match


查看完整回答
反对 回复 2023-09-05
  • 3 回答
  • 0 关注
  • 147 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信