[英]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.