1

我有以下正则表达式来匹配名称-值对:

^(?<NameValue>(?<Name>[A-Z][\w]*):(?<Value>[\w]*)(?=(\||\z)))+$

我试图匹配管道字符或行尾。本质上它应该匹配文本

Setting1:Value1|Setting2:Value2|Setting3:Value3

任何人都知道我做错了什么。我已经有一段时间没有像这样让正则表达式难倒我了 :) 更新:结束了

^(?:(?<NameValue>(?<Name>[A-Z][\w]*):(?<Value>[\w]*))(?m:\||$))+

感谢大家!

4

1 回答 1

1

正则表达式匹配管道或行尾:

(?m:\||$)

ultilinem标志使$匹配行结束。

\z只会匹配字符串的结尾,永远不会匹配行尾。

您可以使用如下表达式:

var re = @"(?xm)
    \A
    (?:
       (?<Name>[A-Z]\w*)
       :
       (?<Value>\w*)
       (?: \| | $ )
    )+
    \z";
于 2013-05-20T14:11:42.737 回答