次の正規表現があります。
Defaults(.*)Class=\"(?<class>.*)\"(.*)StorePath=\"(?<storePath>.*)\"
そして、次の文字列:
Defaults Class="Class name here" StorePath="Any store path here" SqlTable="SqlTableName"
私は次を達成しようとしています:
class Class name here
storePath Any store path here
しかし、結果として私が得ているのは:
class Class name here
storePath Any store path here SqlTable="SqlTableName"
Sqltableテキストの前に停止する方法は?
言語はC#であり、正規表現エンジンは.NETフレームワークに組み込まれています。
どうもありがとう!
回答 3 件
で
storePath
グループでは、任意の文字の0回以上のマッチングを行っています(貪欲なマッチング)。貪欲なマッチとは、可能な限り多くの文字を返すため、最後に出現する"
に達するまで一致する文字を保持することです。 。あなたがする必要があるのは、
.*
を置き換えることによって、貪欲なマッチをレイジーマッチに変換することです.*?
と 。遅延一致の意味は、できるだけ少ない文字を返すことです。したがって、あなたの場合、最初に現れる"
に達するまで一致した文字を保持します。 。正規表現を次のように置き換えます。
Defaults(.*)Class=\"(?<class>.*)\"(.*)StorePath=\"(?<storePath>.*?)\"
貪欲の代わりに怠azine。
正規表現のコンテキストで「遅延」と「貪欲」はどういう意味ですか?
少し読みやすい:
Class="(.+?)".+?StorePath="(.+?)"
。+?貪欲でない一致、基本的に可能な限り一致しないと言っています。 それにより、次の「
関連記事
- 別のグループが続く場合に正規表現でグループをキャプチャしない方法
- キャプチャグループが文字列の最後にある場合にのみ、Regexが一致します
- 正規表現:一致する文字セットで始まるグループをキャプチャする方法
- g修飾子付きの正規表現キャプチャは、最初の出現のみをキャプチャします
- キャプチャされたグループの数を見つけるC#正規表現
- sed:グループをキャプチャして1文字だけを置き換える
- VSCode正規表現は、特定のグループからデータを検索および選択します(置換しません)
- 2つの代替手段として非キャプチャグループを持つJavascript正規表現
- 空白で区切られた正規表現グループの単語
- 2番目のスラッシュの前にすべてをキャプチャします。正規表現
関連した質問
- スペースなしで完全一致の最後のコロンの後の最初の単語を抽出する正規表現
- スペースなしで5番目と6番目のコロンの間の文字列を抽出する正規表現
- ネガティブルックビハインドが期待どおりに機能しない2番目のグループが文字列をキャプチャしないようにするにはどうすればよいですか?
- さまざまな正規表現の可能性を1つに結合する
- パターンの入力を1回だけ使用するにはどうすればよいですか?
- ランダムな順序の要素を持つ正規表現一致グループ
- 空のパーツを同じグループインデックスに保持する正規表現
- 2つの代替手段として非キャプチャグループを持つJavascript正規表現
- 文字列の正規表現を取得する
- <= lastdate + 30dを5の配列に分割するための正規表現
@ ahmed-abdelhameedによって提案された解決策は問題を解決しますが、欲張りでないことは忘れていました。
ありがとう!