0

次のテキストの引用符で囲まれたデータを抽出するのに苦労しています。

msgid: "something"
msgidd: "something"
msgid:"something"
msgidd:"something"
msgid:      "something"
msgidd:      "something"

(?<=msgsid:.{1}?)(.+[^"]")後に続くものが表示さmsgid:れますが、引用符の中にあるものが常に表示されるとは限りません。私の目標は、引用符の内側にあるものを置き換えながら、msgid:そのまま維持することです。どんな助けでもいただければ幸いです。

ありがとう。

4

3 に答える 3

3

後読みを使用すると、許可されるマッチングがはるかに制限されるため、はるかに困難になります。する方が簡単です:

(msgid+:\s*)"(.*?)"

そして、次のように置換を行います$1"something-replacement"

于 2012-09-10T17:59:13.357 に答える
1

必要がなければ後読みを使用すべきではないことに心から同意しますが、それが問題の原因ではありません。これが原因です: .{1}?. おそらく、いくつかの入力の 2 番目のようなオプションの 6 番目の文字に一致させることを意図していたでしょうd。それは単純.?ですが、ほとんどの正規表現フレーバーは、一定幅の要件のためにそれを拒否します。

本当に.{1}?意味するのは、貪欲でない 1 文字だけに一致することです。これはちょっと無意味ですが、構文的には有効です。とにかく拒否することを半分期待して、いくつかのフレーバーでテストしましたが、それらはすべて.{1}?、まるで.. に関しては.?、意図したとおりに一致するいくつかのフレーバー (.NET や Java など) があり、他のフレーバーで使用できる回避策がありますが、ほとんどの場合、最善の解決策は単純に後読みを使用しないことです。

于 2012-09-11T01:57:04.357 に答える
1

なぜ後読みが必要なのですか?これを試して:

msgid:\s*"([^"]+)"

ここでRubularまたはRegexHeroでテストします。

更新
置換については、以下を試して、ここでテストしてください

正規表現:

(msgid:\s*")[^"]+(")

置換:

$1replacementstring$2

ソース:

msgid: "something"
msgidd: "something"
msgid:"something"
msgidd:"something"
msgid:      "something"
msgidd:      "something"

最終文字列:

msgid: "replacementstring"
msgidd: "something"
msgid:"replacementstring"
msgidd:"something"
msgid:      "replacementstring"
msgidd:      "something"

とにかく、これが後読みを使用する必要がある課題である場合は、以下を使用して一致させてください。しかし、これを置換で使用しても意味がありません。

(?<=msgid:)\s*"([^"]+)"
于 2012-09-10T18:06:23.647 に答える