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

本文关键字:提取 取文本 一部分 字符串 RegEx | 更新日期: 2023-09-27 18:26:19

我有以下字符串:

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

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

  • abc
  • 123
  • 456

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

下面当然会捕获@delim字符串的第一个到最后一个实例。

@delim(.+)+@delim

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

您可以使用look-behind,如:

(?<=@delim)'w+

(?<=@delim)正在使用Positive Lookbacking,它将从字面上匹配字符@delim(区分大小写)

而CCD_ 3将匹配来自CCD_。若要包含或排除字符,可以将'w替换为[a-zA-Z0-9_],并包含新字符或删除表达式中不应计算的字符。

在线演示

这是.NET在线演示:

.NET在线演示

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|$)
@delim(.+?)@delim

试试这个。设置g标志。刚刚修改了正则表达式以添加?。获取caotures。请参阅演示。

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

您可以在此正则表达式上使用split:

(?:@delim)+

RegEx演示

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