正则表达式模式匹配串联

7
可以仅使用正则表达式语法来连接正则表达式匹配结果吗?
这个具体示例是一个程序允许正则表达式语法从文件中提取信息,但我想要它从几个部分提取并连接结果。
例如:
输入字符串:1234567890
所需结果字符串:2389
正则表达式匹配:(?<=1).+(?=4)%%(?<=7).+(?=0)
其中%%代表某种连接语法。使用起始和结束语法很重要,因为我知道字段名称但不知道字段的值。
是否存在像%%一样的关键字?有没有更聪明的方法来完成这个任务?代码必须被更改以允许多个正则表达式输入并自动连接吗?
再次说明,要连接的片段可能相距很远,中间可能有未知字符,所有已知的是围绕子字符串的信息。
2011-08-08编辑:该程序是用C#编写的,但与找到基于正则表达式的解决方案相比,更改代码是一项重大工作。

通常情况下不行,但是有些编程语言具有扩展的正则表达式功能。例如,在PHP中,您可以在替换字符串时使用“e”修饰符。 - Karolis
该解析正则表达式的程序是用C#编写的,我相信是在.NET 3.5上。 - Noisedestroyers
1个回答

1

如果不知道你想匹配什么和使用的编程语言是什么,就无法给出确切答案。然而,处理这类问题的通常方法是使用分组

在C#中:

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

string result = m.Groups[0] + m.Groups[1];

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

编辑

如果您无法更改代码,则无法实现您想要的目标。原因是在C#中,正则表达式字符串本身对输出没有任何影响。要更改结果,您必须更改Regex类的调用方法或在此之后进行一些额外的工作。就目前而言,调用的方法很可能只返回匹配对象或匹配对象列表,无论输入的正则表达式字符串如何,都不会实现您想要的功能。


谢谢您的回复。我明白在C#中这个问题很微不足道,但更改应用程序的后勤工作很困难。问题是是否存在仅使用正则表达式的解决方案,因为这样更容易更改。再次感谢。编辑:我们同时在打字,必须是这样。我同意似乎没有办法进行连接而不修改代码。 - Noisedestroyers
3
回答这个基本问题:“是否只使用正则表达式语法可以将正则表达式模式匹配的结果连接起来?” 我认为重要的是要记住,正则表达式不仅仅是一种编程语言,更是一种编程工具。因此,没有一种使用它的方式,因为它是许多语言中以不同方式使用的工具。仅使用正则表达式语法来完成某事是一种具有挑战性的方法来解决问题。 - kevlar1818
我意识到了我的思维错误。我对正则表达式还比较新,认为它在所有实现中都是标准的。 - Noisedestroyers
正则表达式的语法大多是标准的,这意味着 [a-z] 在我所知道的所有编程语言中都可以匹配任何一个小写字母。不同的是如何使用该语法来获得不同的结果,例如查找匹配项、替换文本、过滤等。 - Brian Kintz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接