我很难找到解决方案,我很确定正则表达式支持它。我只是不记得正则表达式世界中这个概念的名称。
我需要搜索并替换特定模式的字符串,但模式可能不同,替换需要“记住”它所替换的内容。
例如,假设我有一个任意字符串:134kshflskj9809hkj
我希望用括号括起数字, 所以结果将是:(134)kshflskj(9809)hkj
查找数字很简单,但如何包围它们?
任何人都可以提供样品或指出正确的方向吗?
答案 0 :(得分:2)
在一些不同的语言中:
// C#:
string result = Regex.Replace(input, @"(\d+)", "($1)");
// JavaScript:
thestring.replace(/(\d+)/g, '($1)');
// Perl:
s/(\d+)/($1)/g;
// PHP:
$result = preg_replace("/(\d+)/", '($1)', $input);
(\d+)
周围的括号使其成为“组”,特别是第一个(在这种情况下)组,在替换字符串中可以是backreferenced。在某些实现中,g
标志是必需的,以使其在单个字符串中多次匹配)。替换字符串非常相似,尽管某些语言将使用\1
而不是$1
,而有些语言将允许这两种语言。
答案 1 :(得分:1)
大多数正则表达式替换函数允许您在定义替换字符串时引用正则表达式中指定的捕获组(a.k.a.后向引用)。例如,使用PHP中的preg_replace()
:
$var = "134kshflskj9809hkj";
$result = preg_replace('/(\d+)/', '(\1)', $var);
// $result now equals "(134)kshflskj(9809)hkj"
其中\1
表示“正则表达式中的第一个捕获组”。
答案 2 :(得分:1)
另一个有点通用的解决方案是:
搜索:/([\d]+)([^\d]*)/g
替换:($1)$2
([\d]+)
:匹配一组一个或多个数字并将其保留在组中
([^\d]*)
:匹配一组非数字,并保留它们。 \D
也可以在这里工作
g
:表明这是一个全局表达式,在输入上多次工作。
($1)
:在替换块中,parens没有特殊含义,因此输出第一组,用parens围绕它。
$2
:输出第二组
我用pretty good online regex tool来测试我的表情。下一步是将它应用于您正在使用的语言,因为每个语言都有自己的实现细微差别。
答案 3 :(得分:1)
如果您只是想搜索数字并替换为parens包围的找到的正则表达式,则不需要反向引用(分组)。在替换字符串中使用整个正则表达式匹配更简单。
例如对于perl
$text =~ s/\d+/($&)/g;
这会搜索一个或多个数字,并替换围绕匹配的parens(由 $&amp; 指定),尾随 g 以查找并替换所有匹配项。< / p>
请参阅http://www.regular-expressions.info/refreplace.html了解正则表达式语言的正确语法。
答案 4 :(得分:0)
根据您的语言,您希望匹配群组。
通常你会以
的形式制作一个模式([0-9]{1,})|([a-zA-Z]{1,})
然后,您将迭代结果组(特定于您的语言)。