Noi*_*ers 6 regex concatenation pattern-matching
是否可以仅使用Regex语法连接正则表达式模式匹配的结果?
具体的实例是一个程序允许正则表达式语法从文件中提取信息,但我希望它从几个部分拉出并连接结果.
例如:
输入字符串:1234567890
期望的结果字符串:2389
正则表达式模式匹配:(?<= 1).+(?= 4)%%(?<= 7).+(?= 0)
其中%%表示某种形式的连接语法.使用语法的开始和结束很重要,因为我知道字段名称而不是字段的值.
是否存在像%%一样的关键字?有更聪明的方法吗?必须更改代码以允许多个正则表达式输入,自动连接?
同样,要连接的部分可能相隔很远,其间有未知字符.所有已知的是围绕子串的信息.
2011-08-08编辑:该程序是用C#编写的,但与找到基于正则表达式的解决方案相比,更改代码是一项重大任务.
如果不确切知道您想要匹配什么以及您使用什么语言,就不可能给您准确的答案。然而,处理此类问题的通常方法是使用分组。
在 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对象或匹配对象的列表,无论输入的正则表达式字符串如何,它们都不会执行您想要的操作。