用于解析相邻键值对的正则表达式

时间:2010-02-16 10:42:05

标签: c# regex

请求宝贵的时间帮助我使用正则表达式查找子字符串值。

这是我的输入

"ADMIN:YESEXT:NOBAT:NOBOM:NO"

我应该能够提取以下内容来输出

ADMIN:YES
EXT:NO
BAT:NO
BOM:NO

我使用以下正则表达式来获取ADMIN:string ^\s?(?:ADMIN:) 我应该如何修改正则表达式以获得所需的输出

9 个答案:

答案 0 :(得分:2)

我会用:

(\w+):(YES:NO)

答案 1 :(得分:1)

您知道冒号后的值始终为YESNO吗?我会说,你想要像

这样的东西
/([^:]+):(YES|NO)/g

$1是属性,$2是其值。

答案 2 :(得分:1)

您可以尝试匹配此正则表达式:

(.*?):(YES|NO)

答案 3 :(得分:1)

([^:]+):(YES|NO)会这样做。这将匹配所有文本,后跟:YES或:NO

答案 4 :(得分:0)

(ADMIN|EXT|BAT|BOM):(YES|NO)

答案 5 :(得分:0)

如果您想以明确的顺序获取值,则可以使用:

^\s?(?:ADMIN:(YES|NO))(?:EXT:(YES|NO))(?:BAT:(YES|NO))(?:BOM:(YES|NO))

答案 6 :(得分:0)

我会去

\w*:(NO|YES)

\w*      - match as many word-charachters as possible  
:        - match a colon  
(NO|YES) - match YES or NO

要获得所有结果,您可以使用以下内容:

Regex regexObj = new Regex(@"\w*:(NO|YES)");
Match matchResults = regexObj.Match(theStringToSearch);
while (matchResults.Success) {
   //take us of matchResults....

   matchResults = matchResults.NextMatch();
}

答案 7 :(得分:0)

@soulmerge建议的正则表达式使用延迟量化器(。*之后的问号)。找到正确的冒号字符。 但这个正则表达式有一个小错误。必须在整个表达式上应用星号(*),而不仅仅是(YES | NO)。

所以这会变成:

((.*?):(YES|NO))*

我试着评论他的答案,但正则表达式没有正确显示。

答案 8 :(得分:0)

试试这个单行

string Content = @"ADMIN:YESEXT:NOBAT:NOBOM:NO";
string Pattern = @"([^:]+):(YES|NO)";

Dictionary<string, string> dict = Regex.Matches(Content, Pattern).Cast<Match>()
    .ToDictionary(m => m.Groups[1].Value, m => m.Groups[2].Value);

然后根据需要转储字典键/值对。