我知道似乎已经有人问过这个问题,但是我已经尝试过搜索并使用其他答案作为示例,但由于某种原因,我似乎无法使其正常工作。
我有文字:
['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']
任何建议将不胜感激。
答案 0 :(得分:2)
您可以使用:
>>> 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详细信息:
amod
:匹配文字amid(
([^-]*)
:匹配0个或多个非-
的字符并将其捕获在#1组中-
:匹配文字-
答案 1 :(得分:0)
答案 2 :(得分:0)
当我想在两个已知子字符串之间找到一个任意子字符串时,我通常依靠先行声明和后向声明的组合。
for string in List:
match = re.search(r'(?<=amod\()[^-]+(?=-)',string).group()
print(match)
请注意,由于后置断言[^-]
,因此必须使用(?=-)
(除负号外的所有字符)。您不能使用贪婪的.+
,然后期望正则表达式停止在您的后视匹配,如果您的后视(-)也处于贪婪匹配(。+)
希望这就是您想要的。