[英]Regex find whole substring between parenthesis containing exact substring
[英]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+ 个单词字符,以便后面必须至少有一个字符例如
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.