反向断言以匹配包含特定单词的字符串的每个部分(RegEx)

时间:2014-02-14 12:39:55

标签: regex

我想匹配受^.*||||.*||||.*$限制的字符串的每个部分,并包含文字Alpha。

例如:

BetaAlpha||Omega||AlphaBeta||Alpha||Omega

现在我有这样的事情:

(?<=\|\||^)(((?!((?<=\|\||^)*Alpha(\|\||$)*)).)*)(?=$|\|\|)

http://rubular.com/r/yLwFDllJaf

它匹配除"Alpha"的部分以外的所有内容。我想扭转它,但无法弄明白。

此字符串中的其他值可能是动态的,只有部分字符串出现在每个字符串中(但随机组合)。

3 个答案:

答案 0 :(得分:0)

此正则表达式与您通过rubular

提供的示例相匹配
(?<=\|\||^)[^|\s]*Alpha[^|\s]*(?=\|\||$)

答案 1 :(得分:0)

我会使用这个正则表达式:

(?<=^|\|\|)[^|]*Alpha[^|]*(?=\|\||$)

此处的解释和演示:http://regex101.com/r/fL8sK7

答案 2 :(得分:0)

如果输入不能包含单个“|” (例如“Alpha | Beta || Gamma || Delta”与“Alpha | Beta”是有效匹配),之前的答案都可以。

如果输入CAN包含单个“|”,那么这应该可行(在.NET和rubular中测试):

(?<=\||^)(?!\|)((?!\|\|).)*Alpha((?!\|\|).)*

使用“BetaAlpha || Omega || Alpha | Beta || Alpha || Omega || TestAlpha”进行测试

输出:

“BetaAlpha”,“Alpha | Beta”,“Alpha”,“TestAlpha”

编辑:删除不必要的括号并在rubular中进行测试。