正则字符串检索
本文关键字:检索 字符串 | 更新日期: 2023-09-27 18:02:43
我有这个字符串,我需要从字符串的最后提取ID (IgnoreCase是true):
字符串:[Test].Test Stuff].[Class].&[002 - My Hat]&[002-01 - Big Hat]
我想提取的内容:
002-01
到目前为止,我得到的是:
(?<=&'[).+(?='s'-'s.+'])
但是我得到了这个:
002 - My Hat]&[002-01
您需要在末尾添加一个输入结束锚$
,并禁止将[]
作为非空.+
序列的一部分进行匹配,如下所示:
(?<=&'[)([^'[']]+)(?='s'-'s[^'[']]+']$)
// ^^^^^^^ ^^^^^^^ ^
// | | |
// No square brackets here |
// |
// End of input marker here
简体版:
(?<=\]\&\[)(\d+-\d+)
解释:
?<=
做一个Positive lookback。这意味着它将匹配()括号内的字符,但不返回它们。我使用的这个Positive Lookbehind里面的字符是]&[
然后匹配'd+
,这意味着1到无穷个连续数字,后跟连字符-
和'd+
你的正则表达式实际上很接近,如果你加上[括号,你应该匹配你想要的。
(?<=']&'[).+(?='s'-'s.+'])
如果数字格式总是相同的,则不需要提前查找,相反,您可以匹配格式。
(?<=']&'[)'d{3}-'d{2}
如果字符串的格式总是相同的,则像这样使用正则表达式中的最后一个]&[
:
']&'[(['d-]*).*
如果数字总是跟在[]&[
否则,我认为像这样的东西应该可以达到目的:
'[(['d-]+)[^'[]*']$
所以后面跟着非[字符一直到最后一个]的一组数字
如果你知道它在字符串的末尾,为什么不使用这个提示来通知处理器呢?下面是使用从右到左的regex选项:
string data = @"[Test].Test Stuff].[Class].&[002 - My Hat]&[002-01 - Big Hat]";
string pattern = @"(?:'[)(?<Data>'d+-'d+)";
Console.WriteLine(Regex.Match(data, pattern, RegexOptions.RightToLeft).Groups["Data"].Value); // 002-01