有没有一种方法可以使用regex来找到两个字符串之间的子字符串?

2024-10-06 10:35:49 发布

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

我知道这个问题似乎已经被问过了,但是我试着用其他的答案来搜索我的例子,但是由于某些原因,我似乎无法让它起作用。你知道吗

我有文本:

    ['root(ROOT-0, love-2) s1', 'amod(perve-5, good-4) s2',
    'advmod(love-2, thanks-12) s3', 'amod(mags-16, glossy-15) s4']

我只希望文本在amod之间(直到-。 例如,我想要:

'perve' and 'mags'

我试过:

words = re.findall('\((.*?)\-', v)

但它的回报是:

['ROOT', 'perve', 'love', 'mags']

如有任何建议,将不胜感激。你知道吗


Tags: 答案文本原因root例子goods2s1
3条回答

当我想在两个已知的子字符串之间找到一个任意的子字符串时,我通常依赖于lookahead和lookahead断言的组合。你知道吗

for string in List:
    match = re.search(r'(?<=amod\()[^-]+(?=-)',string).group()
    print(match)

注意,由于lookbehind断言(?=-),您必须使用[^-](除minus之外的所有内容)。如果lookback(-)也在greedy匹配中(+),则不能使用greedy.+然后期望regex在lookback停止匹配

希望这是你想要的。你知道吗

这似乎像regex一样起到了作用:

(?<=amod\().+?(?=-)

Regex demo

您可以使用:

>>> test_str = ("    ['root(ROOT-0, love-2) s1', 'amod(perve-5, good-4) s2',\n"
...     "    'advmod(love-2, thanks-12) s3', 'amod(mags-16, glossy-15) s4']")
>>>
>>> print ( re.findall(r"amod\(([^-]*)-", test_str) )
['perve', 'mags']

RegEx Demo

正则表达式详细信息:

  • amod:匹配文本amid(
  • ([^-]*):匹配0个或多个非-的字符并将其捕获到组#1中
  • -:匹配文本-

相关问题 更多 >