【问题标题】:Remove a character in a string, provided it is enclosed by brackets删除字符串中的字符,前提是它被括号括起来
【发布时间】:2013-05-18 22:53:52
【问题描述】:

在此之前,我还没有学习过正则表达式(尽管如果有人可以提供,我很乐意使用它)。

我有这样的字符串:

“zum Abschluss kommen (nachdrücklich;abgeschlossen werden)”。

我想要做的是将字符; 替换为:,只要它出现在括号()中的某处。即:我希望我的字符串结束

“zum Abschluss kommen (nachdrücklich: abgeschlossen werden)”。

给我带来麻烦的是括号内可能有任何数量的文本,所以我通常(笨拙)的字符串操作对我没有帮助。

额外的例子:

“alle Mann an Deck!(Seemannsspr.; ein Kommando)”

->

"alle Mann an Deck! (Seemannsspr.: ein Kommando)"

我不能只是 Replace() 它,因为完整的字符串包含我想保留的 ;。例如:

"das Deck reinigen, scheuern; auf Deck sein; unter, von Deck gehen; alle Mann an Deck! (Seemannsspr.; ein Kommando);"

有什么建议吗?

【问题讨论】:

  • 额外信息:它是包含 ';' 的较长字符串的一部分我想保留的字符。
  • 也许这会对stackoverflow.com/questions/1359412/… 有所帮助,尽管您需要调整它以替换而不是删除。
  • 我可以保证它既是平衡的又是非嵌套的。

标签: c# text replace


【解决方案1】:

由于括号/方括号不嵌套或不平衡的限制,然后考虑这个使用positive look-behind的正则表达式。

这种向后看确保有一个向左的( 比任何) 更近,因此我们必须在括号集中:

(?<=[(][^)]*);

使用中:

Regex.Replace(input, @"(?<=[(][^)]*);", ":");

如果初始约束无效,则此正则表达式将“不可预测地”工作。

【讨论】:

  • 我仍然需要考虑后向/窥视,但非常好的答案。
【解决方案2】:

也许有点啰嗦。

var a = "Your string";

// Get the bit within them
var bit = a.Substring(a.IndexOf("("), a.IndexOf(")")); 
// Fix the bit
var replaced = bit.Replace(";", ":");
// Put the fixed bit back in the original string
var result = a.Replace(bit, replaced); 

【讨论】:

  • 多组括号不会卡住吗?
  • 啊,那是真的,我从你的例子中认为只有一组
猜你喜欢
  • 2012-01-28
  • 1970-01-01
  • 1970-01-01
  • 2012-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多