繁体   English   中英

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

[英]Regex to find strings containing substring, but not ending on same substring

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

所以唱歌这个词不会起作用,但歌手会起作用。

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

(!<?(ing))$

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

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

但这行不通,我的所有解决方案都将使其发挥作用,而且还不止一个词。 所以它会匹配歌手而不是歌手制作,它应该仍然在这里匹配歌手,而不是制作。

您可以使用以下模式:

ing(?=\w)

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

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

编辑:

要匹配包含非终结re.findall 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']

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

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

解释

  • \\b一个词边界
  • \\w*匹配 0+ 个单词字符
  • ing匹配所需的ing
  • (?!\\w*ing\\b)否定前瞻,断言ing不在词尾
  • \\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']

您可以使用此模式:

import re

pattern = re.compile('\w*ing\w+')
print(pattern.match('sing'))  # No match
print(pattern.match('singer')) # Match

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM