我正在尝试使用正则表达式从字符串返回一个值,如果它像“P0000000S”那样开始,但是如果没有则返回另一个。
例如:
我有这个字符串
P0000000S521500500015 1TZ003B 3090942 04260
结果:3090942
因为这从P0000000S开始,它应该返回这个结果:3090942
但是这个
P3417677S521500500015 1TZ003B 3090942 04260
结果:3419677
应该返回第一个P之间的数字,直到S:3417677
在阅读和调查之后,我想出了这个正则表达式:
(?(?=^P0000000S)^.{29}\s(\w+)\s.{5}$|^P(\d+).{35})
根据我测试它的网站
https://regex101.com/r/aH1vG7/1
好吧,我正在尝试在我正在创建的C#APS.NET网站上使用它,但它不起作用,我需要澄清我需要在Regex上执行IF-THEN-ELSE逻辑,因为这是许多其他验证器之一的验证器,所有其他验证器正在工作。 如果有任何帮助,我将其与Regex.Match函数一起使用,然后循环生成的组。
感谢。
答案 0 :(得分:0)
如果第一个没有匹配,只需使用两个不同的regexen并通过。
static string PartImInterestedIn(string input)
{
Match match;
match = Regex.Match(input, @"(?=^P0000000S)\S+ \S+ (\S+)");
if (!match.Success)
{
match = Regex.Match(input, @"^P(\d+)S");
}
return match.Groups[1].Value;
}
答案 1 :(得分:0)
使用两种不同的条件和外观:
var regex = new Regex(@"(?<=P0000000S\w+\s\w+\s)\w+|(?<=P)\d+(?=S)");
您只需要过滤结果不是0000000。