请求宝贵的时间帮助我使用正则表达式查找子字符串值。
这是我的输入
"ADMIN:YESEXT:NOBAT:NOBOM:NO"
我应该能够提取以下内容来输出
ADMIN:YES
EXT:NO
BAT:NO
BOM:NO
我使用以下正则表达式来获取ADMIN:string
^\s?(?:ADMIN:)
我应该如何修改正则表达式以获得所需的输出
答案 0 :(得分:2)
我会用:
(\w+):(YES:NO)
答案 1 :(得分:1)
您知道冒号后的值始终为YES
或NO
吗?我会说,你想要像
/([^:]+):(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);
然后根据需要转储字典键/值对。