正则表达式模式匹配连接

Noi*_*ers 6 regex concatenation pattern-matching

是否可以仅使用Regex语法连接正则表达式模式匹配的结果?

具体的实例是一个程序允许正则表达式语法从文件中提取信息,但我希望它从几个部分拉出并连接结果.

例如:

输入字符串:1234567890

期望的结果字符串:2389

正则表达式模式匹配:(?<= 1).+(?= 4)%%(?<= 7).+(?= 0)

其中%%表示某种形式的连接语法.使用语法的开始和结束很重要,因为我知道字段名称而不是字段的值.

是否存在像%%一样的关键字?有更聪明的方法吗?必须更改代码以允许多个正则表达式输入,自动连接?

同样,要连接的部分可能相隔很远,其间有未知字符.所有已知的是围绕子串的信息.

2011-08-08编辑:该程序是用C#编写的,但与找到基于正则表达式的解决方案相比,更改代码是一项重大任务.

Bri*_*ntz 1

如果不确切知道您想要匹配什么以及您使用什么语言,就不可能给您准确的答案。然而,处理此类问题的通常方法是使用分组

在 C# 中:

string pattern = @"(?<=1)(.+)(?=4).+(?<=7)(.+)(?=0)";
Match m = Regex.Match(input, pattern);

string result = m.Groups[0] + m.Groups[1];
Run Code Online (Sandbox Code Playgroud)

同样的方法也可以应用于许多其他语言。

编辑

如果您无法更改代码,那么就无法完成您想要的事情。原因是在 C# 中,正则表达式字符串本身对输出没有任何影响力。要更改结果,您必须更改 Regex 类的被调用方法或随后执行一些额外的工作。事实上,调用的方法很可能只返回一个Match对象或匹配对象的列表,无论输入的正则表达式字符串如何,它们都不会执行您想要的操作。

  • 回答基本问题:“是否可以仅使用正则表达式语法来连接正则表达式模式匹配的结果?”。我认为重要的是要记住,正则表达式与其说是一种编程“语言”,不如说是一种编程“工具”。因此,没有“单一”的方法来使用它,因为它只是一种被许多语言以不同方式使用的工具。“仅使用正则表达式语法”做某事是解决该问题的一种具有挑战性的方法。 (3认同)