1

事先,我还没有学习过正则表达式(尽管如果有人可以提供的话,我很乐意使用它)。

我有这样的字符串:

“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);”

有什么建议吗?

4

2 回答 2

2

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

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

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

正在使用:

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

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

于 2013-05-18T23:07:08.160 回答
0

可能有点啰嗦。

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); 
于 2013-05-18T23:04:24.473 回答