1

前もって、私は正規表現をまだ学んでいません (ただし、誰かが提供してくれるなら喜んで使用します)。

次のような文字列があります。

「zum Abschluss kommen (nachdrücklich; abgeschlossen werden)」。

私がやりたいのは、括弧内のどこかに出現するたびに文字;を置き換えることです()。:Ie: 私は私の文字列を終わらせたい

「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

括弧/ブラケットがネストされていない、またはバランスが取れていないという制限があるため、肯定的な後読みを使用するこの正規表現を検討してください。

この後方参照により、どのよりも左( に近い)ものが存在することが保証されるため、ブラケット セット内にいる必要があります。

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

使用中で:

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 に答える