space dash作为组匹配的分隔符

时间:2017-03-14 14:20:49

标签: regex

我试图贪婪匹配字符串并将其标记为组,直到遇到空格短划线( - )。到目前为止,我已经:

^ *-{2}([\w\d-]+)(=([ \w\d-]+))?(.*)|(.+)

我的测试字符串是:

--match1=match2
--match1=match2 match2
--match1=match2 match2-match2
--mat-ch1=match2 match2
--match1=match2-match2 match2
--match1=match2 -lastmatch
--match1=match2 --lastmatch
--match1 -lastmatch
--match1 --lastmatch
lastormatch

如果每种匹配(match1match2lastmatchlastormatch)彼此相邻,则应将它们组合在一起。除了6和7之外,这适用于每一行。基本上' -'在match2组时,它应该作为分隔符(-包围的/w/d可以作为字符串内部组的一部分。我知道,应该使用前瞻/后视,但我无法做到。

What I have

相比,

what I need

regex101.com

2 个答案:

答案 0 :(得分:0)

不完全确定您要实现的目标,但要根据您的需求而定,"我需要的是什么"这可能就足够了:

px

接受^ *-{2}([\w\d-]+)(=(?:[\w\d-]| (?!-))+)?(.*)|(.+)或未跟随的空格 - 而不是[\w\d-],它似乎适用于测试数据。

但如果不确切了解您的目标是什么,可能会出现不同数据集的问题。

答案 1 :(得分:0)

^ (?:--)([\w-]+)(?:=((?:[\w-]| \w)+))?|(.)正是我所需要的。 @trincot和@rvalvik的综合答案。