正则表达式匹配动态模式

本文关键字:模式 动态 正则表达式 | 更新日期: 2023-09-27 17:50:12

我有一个字符串,我需要使用Regex(或Match)解析:

SomeTextHereThatIWantToIgnore: <First Month.104.yyyy-mm-dd> <Last Day.2.yyyy-mm-dd>"  OR SomeTextHereThatIWantToIgnore: "<BadVerb.104>"

可能有一个、两个或三个字符串(都在一行上)我想要解析。在每种情况下,我都想获取"<"answers">"之间的所有内容。

那么,在第一个例子中,我想要获取"first Month.104"。和"最后一天"。在第二个例子中,我想要获取"BadVerb.104"。

有任何正则表达式大师可以告诉我如何做到这一点吗?

正则表达式匹配动态模式

获取尖括号内文本而不捕获括号的基本正则表达式是

(?<=<)[^>]+(?=>)

使用Regex.Matches获取匹配项

var matches = Regex.Matches(str, @"(?<=<)[^>]+(?=>)");

Try: &lt;['s'S]*&gt;

['s' s]捕获任何空白字符或任何非空白字符,因此它们将捕获&lt;&gt;之间的任何内容。

看到

您可以使用以下命令(对于多行匹配使用s修饰符):

(?s)(?<=&lt;).*?(?=&gt;)

看到演示

谢谢stribizhev,我不知道火柴的收藏。最后我做了一个简单的模式:

[<]([^>]+)

也就是说,查找"<",然后获取所有不是">"的内容。火柴集就是我要找的。我迭代了Match集合,并能够进一步解析结果字符串并得到我想要的结果。

感谢Sami, Karthik和Walker(这个看起来也很简单)。