正则表达式匹配动态模式

时间:2015-05-20 17:24:17

标签: c# regex

我需要使用正则表达式(或匹配)解析一个字符串:

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

我想要解析一个,两个或三个字符串(全部在一行上)。在每种情况下,我想抓住&#34;&lt;&#34;之间的所有内容。和&#34;&gt;&#34;。

所以,在第一个例子中,我想抓住&#34; First Month.104.yyyy-mm-dd&#34;和#34;去年.2yyy-mm-dd&#34;。在第二个例子中,我想要抓住&#34; BadVerb.104&#34;。

那里的任何正则表达大师可以告诉我如何实现这个目标吗?

4 个答案:

答案 0 :(得分:1)

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

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

使用Regex.Matches获取您的匹配。

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

答案 1 :(得分:0)

您可以使用以下内容(使用s修饰符进行多行匹配):

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

请参阅DEMO

答案 2 :(得分:0)

尝试:&lt;[\s\S]*&gt;

[\ s \ S]捕获任何空白字符或任何非空白字符,以便它们一起捕获&lt;&gt;之间的任何内容。

请参阅here

答案 3 :(得分:0)

谢谢stribizhev,我不知道Matches系列。我最终做了一个简单的模式:

[<]([^>]+)

即寻找“&lt;”然后抓住所有不是“&gt;”的东西。匹配集合是我正在寻找的部分。我迭代了Match集合,并能够进一步解析生成的字符串并获得我想要的内容。

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