RegEx忽略字符串的一部分来提取文本

时间:2014-10-13 15:34:04

标签: c# .net regex vb.net regex-lookarounds

我有以下字符串:

@delimabc@delim@delim123@delim@delim456@delim

我需要编写一个.Net RegEx,在这个例子中找到3个匹配项(但假设匹配的数量是可变的:

  • ABC
  • 123
  • 456

如何编写一个RegEx,使表达式只匹配第一个和第二个@delim,然后匹配第三个和第四个,依此类推?

以下将从@delim字符串的第一个实例到最后一个实例进行捕获。

@delim(.+)+@delim

3 个答案:

答案 0 :(得分:2)

您可以使用后面的样子:

(?<=@delim)\w+

(?<=@delim)正在使用正面观察,它将字面@delim字面匹配(区分大小写)

\w+将匹配[a-zA-Z0-9_]中的任何字词。要包含或排除字符,您可以\w替换[a-zA-Z0-9_],并包含新字符或删除不应在表达式中评估的字符。

<强> Online Demo

这是.NET在线演示:

<强> .NET Online Demo

VB.NET版

Dim sampleInput="@delimabc@delim@delim123@delim@delim456@delim"
Dim results = Regex.Matches(sampleInput,"(?<=@delim)\w+")

For Each item As Group In results
    Console.WriteLine("Line: {0}", item)
Next

C#版

var sampleInput = "@delimabc@delim@delim123@delim@delim456@delim";
var results = Regex.Matches(sampleInput, "(?<=@delim)\\w+");

foreach (Group item in results) {
    Console.WriteLine("Line: {0}", item);
}

更新版本:

(?<=@delim)[^@].+?(?=@delim|$)

答案 1 :(得分:1)

@delim(.+?)@delim

试试这个。设置g标记。只需修改你的正则表达式即可添加?。抓住捕获。查看演示。

http://regex101.com/r/uH3tP3/1

答案 2 :(得分:0)

你可以在这个正则表达式上使用split:

(?:@delim)+

RegEx Demo

或者用空字符串替换给定的正则表达式模式。