regex 需要帮助修改python中现有的正则表达式模式,以便在模式搜索中不包括最后一个单词

vom3gejh  于 2023-08-08  发布在  Python
关注(0)|答案(2)|浏览(59)

我需要帮助修改现有的正则表达式模式,使其在模式搜索中不包含最后一个单词。
目前,这是regex模式,我有.*\w(?=\s+\w+-),这是输入字符串:

13wfe + 123dg Tetest-xt ldf-dfdlj-dfldjf-dfs test

字符串
现在,这个模式返回预期的匹配:

13wfe + 123dg Tetest-xt


但是,我有另一个场景,我的输入字符串是:

13wfe + 123dg Tetest-xt ldf-dfdlj-dfldjf-dfs test-test


我的预期匹配是

13wfe + 123dg Tetest-xt


但我得到了

13wfe + 123dg Tetest-xt ldf-dfdlj-dfldjf-dfs


所以现在,基本上我想修改regex模式,它在模式搜索过程中基本上会忽略句子中的最后一个单词。请在这方面指导我。

odopli94

odopli941#

你可以使用这个正则表达式,在已经存在的lookahead条件中添加负lookahead条件:

.*\w(?=\s+\w+-(?!\w+$))

字符串
RegEx Demo
负先行条件(?!\w+$)将确保在匹配hyohen后忽略行中的最后一个字。

3zwjbxry

3zwjbxry2#

您可以使用捕获组,并定义一个排除值的模式。
例如,此模式将捕获直到最后一个单词或连字符的单词的每个值。

(.+)\s+\w+(?:-\w+)*$

字符串
虽然,你暗示它应该排除最后一个词,和倒数第二个词。
因此,您可以修改模式以在末尾包含一个额外的匹配。

(.+)(?:\s+\w+(?:-\w+)*){2}$


下面是一个例子。

string_a = '13wfe + 123dg Tetest-xt ldf-dfdlj-dfldjf-dfs test'
string_b = '13wfe + 123dg Tetest-xt ldf-dfdlj-dfldjf-dfs test-test'

pattern = re.compile(r'(.+)(?:\s+\w+(?:-\w+)*){2}$')

match = re.match(pattern, string_a)
print(match.group(1))

match = re.match(pattern, string_b)
print(match.group(1))


产出

13wfe + 123dg Tetest-xt
13wfe + 123dg Tetest-xt

相关问题