正则字符串检索

本文关键字:检索 字符串 | 更新日期: 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