C# Regex search and replace,其中替换项是搜索词的mod
我很难找到解决这个问题的方法,而且我很确定正则表达式支持它。我只是想不起这个概念在正则表达式世界里的名字 我需要搜索并替换特定模式的字符串,但模式可能不同,替换需要“记住”它所替换的内容 例如,假设我有一个任意字符串:134kshflskj9809hkj 我想用括号把数字括起来, 结果是:(134)kshflskj(9809)hkj 找到数字很简单,但如何将它们包围起来呢C# Regex search and replace,其中替换项是搜索词的mod,c#,regex,C#,Regex,我很难找到解决这个问题的方法,而且我很确定正则表达式支持它。我只是想不起这个概念在正则表达式世界里的名字 我需要搜索并替换特定模式的字符串,但模式可能不同,替换需要“记住”它所替换的内容 例如,假设我有一个任意字符串:134kshflskj9809hkj 我想用括号把数字括起来, 结果是:(134)kshflskj(9809)hkj 找到数字很简单,但如何将它们包围起来呢 有人能提供一个样本或给我指出正确的方向吗?根据您的语言,您正在寻找匹配组 因此,通常您将以 ([0-9]{1,})|([a-
有人能提供一个样本或给我指出正确的方向吗?根据您的语言,您正在寻找匹配组 因此,通常您将以
([0-9]{1,})|([a-zA-Z]{1,})
然后,您将在中(特定于您的语言)迭代生成的组。根据您的语言,您希望匹配组 因此,通常您将以
([0-9]{1,})|([a-zA-Z]{1,})
然后,您将在(特定于您的语言)中迭代生成的组。在一些不同的语言中:
// 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+)
周围的括号使其成为一个“组”,特别是第一个(仅在本例中)可以位于替换字符串中的组。在某些实现中需要使用g
标志,以使其在单个字符串中多次匹配)。替换字符串非常相似,尽管有些语言将使用\1
而不是$1
,有些语言将两者都允许。在一些不同的语言中:
// 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+)
周围的括号使其成为一个“组”,特别是第一个(仅在本例中)可以位于替换字符串中的组。在某些实现中需要使用g
标志,以使其在单个字符串中多次匹配)。替换字符串非常相似,尽管有些语言将使用\1
而不是$1
,有些语言将两者都允许。大多数正则表达式替换函数允许您在定义替换字符串时引用正则表达式中指定的捕获组(也称为反向引用)。例如,使用PHP中的preg_replace()
:
$var = "134kshflskj9809hkj";
$result = preg_replace('/(\d+)/', '(\1)', $var);
// $result now equals "(134)kshflskj(9809)hkj"
其中
\1
表示“正则表达式中的第一个捕获组”。大多数正则表达式替换函数允许您在定义替换字符串时引用正则表达式中指定的捕获组(也称为反向引用)。例如,使用PHP中的preg_replace()
:
$var = "134kshflskj9809hkj";
$result = preg_replace('/(\d+)/', '(\1)', $var);
// $result now equals "(134)kshflskj(9809)hkj"
其中
\1
表示“正则表达式中的第一个捕获组”。另一个比较通用的解决方案是:
搜索:/([\d]+)([^\d]*)/g
替换:
($1)$2
([\d]+)
:匹配一组或多个数字,并将它们保留在一个组中([^\d]*)
:匹配一组非数字,并保留它们<代码>\D也可以在这里使用。g
:表示这是一个全局表达式,用于对输入进行多次操作。
($1)
:在replace块中,参数没有特殊意义,因此输出第一组,并用参数包围它。$2
:输出第二组
我用了一个测试仪来测试我的表情。下一步是将其应用于您正在使用的语言,因为每种语言都有自己的实现细节 另一个比较通用的解决方案是: 搜索:
/([\d]+)([^\d]*)/g
替换:
($1)$2
([\d]+)
:匹配一组或多个数字,并将它们保留在一个组中([^\d]*)
:匹配一组非数字,并保留它们<代码>\D也可以在这里使用。g
:表示这是一个全局表达式,用于对输入进行多次操作。
($1)
:在replace块中,参数没有特殊意义,因此输出第一组,并用参数包围它。$2
:输出第二组
我用了一个测试仪来测试我的表情。下一步是将其应用于您正在使用的语言,因为每种语言都有自己的实现细节 如果您只是想搜索数字并替换为找到的由paren包围的正则表达式,则不需要反向引用(分组)。在替换字符串中使用整个正则表达式匹配更简单
e、 g代表perl
$text =~ s/\d+/($&)/g;
这将搜索1个或多个数字,并用匹配项周围的括号(由$&指定)替换,用尾随的g替换所有匹配项
有关正则表达式语言的正确语法,请参阅。如果您只是想搜索数字并替换为找到的由括号包围的正则表达式,则不需要反向引用(分组)。在替换字符串中使用整个正则表达式匹配更简单
e、 g代表perl
$text =~ s/\d+/($&)/g;
这将搜索1个或多个数字,并用匹配项周围的括号(由$&指定)替换,用尾随的g替换所有匹配项
有关正则表达式语言的正确语法,请参阅。您使用的是哪种语言?这个概念被称为backreference,顺便说一句:C#,但故意忽略了这个事实。我很好奇如何使用“general”正则表达式来实现这一点。谢谢你的回溯记忆慢跑。没错,不过正则表达式并不是语言不可知论者。对于Perl和.NET正则表达式替换字符串的实现,第一组为1美元,第二组为2美元,但是这个方案并不是所有实现中的硬性规定。你可以在这里尝试工具中的替换功能,如果你需要,它甚至会为你生成必要的C代码。你使用的是什么语言?这个概念被称为backreference,顺便说一句:C#,但故意忽略了这个事实。我很好奇如何使用“general”正则表达式来实现这一点。谢谢你