使用C#正则表达式替换字符串中的字符

3
我想知道如何将数组括号[]内的,字符替换为另一个字符,比如.。我有以下字符串表达式:

Attributes["412324 - PENNDOT I-95", "Category"].Value, Attributes["412324 - PENNDOT I-95", "Category"].Code

期望的输出应该是:

Attributes["412324 - PENNDOT I-95". "Category"].Value, Attributes["412324 - PENNDOT I-95". "Category"].Code


2
你尝试过什么吗?发布一些你已经尝试的代码。 - Darko
是的,我尝试过了,它可以正常工作。 - Bichvan Nguyen
2个回答

6
var regex = new Regex(@"(?<=\[[^\[\]]*),(?=[^\[\]]*\])");
return regex.Replace(<your sample string>, ".");

在正则表达式模式中,逗号的左侧是一个正向零宽断言,表示必须有一个[,然后是零个或多个既不是[也不是]的字符,一直到逗号。
在逗号之后,是一个正向预查零宽断言,表示可以有零个或多个既不是[也不是]的字符,然后必须有一个闭合的]
零宽断言意味着该模式必须出现在匹配文本的前面或后面,但不是匹配的一部分。由于我们只匹配逗号,,所以替换为点.

谢谢,Jay。这个解决方案很好用!它让我有动力去学习更多关于正则表达式的知识。 - Bichvan Nguyen

0

如果它总是按照这种模式,那么更快的方法是使用String.Replace:

string sin = "Attributes["412324 - PENNDOT I-95", "Category"].Value, Attributes["412324 - PENNDOT I-95", "Category"].Code";
string sout = sin.Replace("\", \"","\". \"");

你可以使用正则表达式做同样的事情,但它会更慢,并且如果输入字符串的结构发生变化,它仍然可能会出错。


这是一个有效的解决方案,但我不同意你最后的评论。你的解决方案比一个好的正则表达式解决方案更容易出现问题。 - Darko
是的,我知道这点。正则表达式在大多数情况下都能使用,但如果输入字符串始终如此,OP 可以考虑使用这个更简单(更快)的解决方案。不过,显然 OP 问题的正确答案是 Jay 的答案-它大量使用正则表达式仅替换正确的逗号。 - Soul Reaver
正如您所提到的,这个解决方案应该是可行的,但是有时候输入字符串可能会有额外的空格,引号可能是单引号。我在我的问题中没有表述清楚。 - Bichvan Nguyen

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