繁体   English   中英

或正则表达式

[英]or in regular expression

我正在使用此(?<=^.*?;).*表达式来逐一解析用户ID。 之所以有效,是因为它们被分隔; 但是当到达最后一个没有的人时失败; 在他/她的身份证末尾。 要获得下一个ID,我使用^.*?;

一切都很好,但是当它进入aharris时,它会失败并不断给我aharris ^.*?; 不应给我aharris因为(?<=^.*?;).*已经给了我aharris

示例字符串:

jsmith; bbrown; kosborne; aharris

现在,有没有一种方法可以添加或切换^.*?; 如果最后一个人没有,它将给我空字符串;

我希望我有道理。

示例字符串的结构方式,可以使用以下模式将其分解:

"((?:^|; )(?<userId>.*?))+"

括号的第一个子集是一个“非捕获”组,它与行的开头(对于第一项)或分号后跟一个空格(对于所有其他项)相匹配。 括号的第二个子集将非贪婪地匹配任何字符集(这意味着将使用最小的字符集来导致整个模式的匹配),并将其“捕获”到一个可以通过其名称引用的集合中,“用户身份”。

通过以下方式使用此模式(要求引用/使用System.Text.RegularExpressions和System.Linq):

var match = Regex.Match(input, pattern);
var userIds = match.Groups["userId"].Captures.OfType<string>().ToList();

完成后,userIds将是实例化的List<string>填充此字符串中的所有四个userIds。

采用

 "jsmith; bbrown; kosborne; aharris".Split(';').Select(x => x.Trim()).ToList()

代替。

评论中的讨论引出了以下建议:

 Regex.Matches("\w+(?=\s*;)", "jsmith; bbrown; kosborne; aharris").Cast<Match>().Select(m => m.Value).ToList()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM