2017-04-26 4 views
0

私は広範囲に検索しますが、私はこれに簡単な答えが見つからず、Regexの経験は限られています。私は説明されている簡単な解決策に感謝します。Regexがマッチの任意の部分を食べさせないようにする

私は非常に長い文字列を持っていると私は次のように特定の単語を置換する必要があります。

例:あなたはそれが「LINK_ABC」作る文字列「LINK-ABC」を見つけるどこを。

私はRegex MatchとReplaceの文字列を書きました: @"LINK-ABC", @"LINK_ABC"となりました。

しかし、私が認識していないことがいくつかありました。その上

LINK-ABC-DEF LINK-ABC-GHI JKL-...と: は、このようなファイル内の単語がある可能性があります。

だから私は(私が欲しいものされていない。これはそのまま残っているはず...)など、「LINK_ABC-DEF」を取得

私は私が本当に望んでいたことだったと思われた問題を実現したら、一致する単語のみを認識し、何か他のものと組み合わされている場合はそのまま残す。マッチワードでスペースや期間を確認すると、それはそうするはずです...

@"LINK-ABC[ |\\.]",@"LINK_ABC" 

...今私は遭遇しました。

サンプル文字列:

リンク-XXXリンク-AAA-SSSリンク-XXX-BBBリンク-XXX-XXXリンク。

マッチ/文字列に置き換えます

link-xxx[ |\\.],link_xxx 

結果文字列:

link_xxxlink-AAA-SSSリンク-XXX-BBB link_xxxlink_xxx

置換は正しいですが、末尾のカンマまたはピリオドが「腐った」ので、結果の文字列は間違っています。

私はそれがスペース上で一致する場合、スペースがあり、それが期間に一致する場合、交換には期間があるように一致する方法はありますか?私は2つの別々の試合を行うことができましたが、私はRegexの理解を深め、可能ならばもっとエレガントにしたいと思います。

あなたが matchstringの最後の部分の周りの括弧は、その中にマッチしたものは何でも保持されます、そして fixstr$1が置き換えられます「キャプチャグループ」

var matchstring = @"link-xxx([ \.]|$)"; 
var fixstr = @"link_xxx$1"; 

であなたが望む動作を実現することができるはず

+0

正規表現にする必要はありますか? – MrZander

+0

また、これはPythonとは何が関係していますか? – MrZander

+0

実際のコードとテスト文字列をフォーマットされたブロックに入れてください。私の古代の眼球は、インラインの不器用さを解読できません。 –

答えて

0

そのグループが捉えたものは何でも。

また、句読点セクションを少し変更しました。入力の最後の単語(|$を追加したもの)があれば置き換えたいと仮定しています。文字クラス[]の中の|は文字で、|文字なので、実際に入力したものではないと仮定して削除しました。

+0

ありがとうございました。これはまさに私が探していたエレガンスであり、私は正規表現の知識を向上させました。本当にあなたのトラブルに感謝します。再度、感謝します。私はこれを答えとしてマークする方法はわかりませんが、私は確かにあなたのレスポンスをアップアップしようとします。 – Morepork

+0

(OK、upvoteを理解して回答としてマークすることができましたが、私はあなたにupvoteできるように十分なポイントがありません。 – Morepork

関連する問題