【问题标题】:C# regex: replace either of two matches with the same valueC# 正则表达式:用相同的值替换两个匹配项中的任何一个
【发布时间】:2012-07-24 23:17:35
【问题描述】:

尝试在字符串中进行一些正则表达式匹配和替换,从而将所有与符号、单引号和空格字符替换为破折号“-”

...和

所有重复的破折号都替换为单个破折号。

这是我正在尝试的,但它不起作用,因为重复的破折号没有被替换。任何帮助表示赞赏和感谢。

Regex.Replace(mystring, "([' &])|([-]{2,})", "-")

【问题讨论】:

  • 最好说“与号、单引号和空格字符”而不是“&”“'”。后者很难阅读。
  • 我们可以获取一个无效字符串的样本吗?

标签: c# regex


【解决方案1】:

试试这个(看起来更简单)。我假设您从不希望结果中出现“--”。

string orig = "12467&89- 1&2467'89 12'46789 12467--89";

Regex regex = new Regex("[&' -]+");

string newString = regex.Replace(orig, "-");

输出:

12467-89-1-2467-89-12-46789-12467-8

【讨论】:

  • 谢谢詹姆斯,这是一个很大的帮助。
【解决方案2】:

该正则表达式应该可以工作:

你只需要完成任务:

mystring = Regex.Replace(mystring, "([' &])|([-]{2,})", "-");

字符串是不可变的,还记得吗?

【讨论】:

  • 谢谢迈克尔。如果我以这个调用为例,我仍然会连续得到两个破折号: string mystring = Regex.Replace("hi&--6-", "([' &])|([-]{2,})" , "-");
  • 是的,因为您的正则表达式不会将与号和单引号与连字符组合在一起。如果您的意图是让结果字符串没有双连字符,请使用 James 回答中的正则表达式。
猜你喜欢
  • 1970-01-01
  • 2016-05-04
  • 1970-01-01
  • 2011-06-17
  • 1970-01-01
  • 2012-09-28
  • 1970-01-01
  • 2012-09-19
  • 1970-01-01
相关资源
最近更新 更多