問題タブ [regex-group]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
10385 参照

regex - Powershell:正規表現の名前付きグループを変数に置き換える

次のような正規表現があるとしますが、それをファイルから変数 $regex にロードしたため、設計時には内容がわかりませんが、実行時に「version1」が含まれていることを発見できます。 「version2」、「version3」、および「version4」の名前付きグループ:

...そして私はこれらの変数を持っています:

...そして、ファイル内に次の文字列があります。

...変数 $input に格納されるため、($input -match $regex) は $true と評価されます。

$regex に表示される順序がわからない場合、文字列 $input の $regex からの名前付きグループを $version1、$version2、$version3、$version4 の値に置き換えるにはどうすればよいですか ($正規表現にはこれらの名前付きグループが含まれます)?

グループ名を一致のインデックスとして使用して、名前付きグループを変数の値に置き換えるための構文を説明している参照が見つかりません。これはサポートされていますか?

編集: 明確にするために-目標は、特定のファイルのバージョン文字列が可変数のバージョンフィールド(2、3、または4つすべてのフィールド)の置換を必要とする、あらゆる種類のテキストファイルでテンプレート化されたバージョン文字列を置き換えることです)。たとえば、ファイル内のテキストは次のいずれかのようになります (ただし、これらに限定されません)。

ユーザーは、フィールドを含む行に一致するファイル セットと正規表現を指定できます。元のアイデアは、個々のフィールドが名前付きグループによってキャプチャされるというものでした。ユーティリティには、ファイル内で置換する必要がある個々のバージョン フィールド値がありますが、置換を含む行の元の形式を保持し、要求されたフィールドのみを置換する必要があります。

EDIT-2: 各一致の位置と範囲に基づいて部分文字列の計算を行うことで、必要な結果を得ることができると思いますが、Powershell の置換操作によって作業が節約されることを期待していました。

EDIT-3: したがって、Ansgar が以下で正しく簡潔に説明しているように、"- replace" 操作 (または他の正規表現操作) を使用して、元の文字列の残りの部分をそのまま残しながら、名前付きグループのキャプチャの置換を実行します。この問題について、誰かが興味を持っている場合は、以下の解決策を使用することになりました。YMMV、他の解決策が可能です。フィードバックとオプションを提供してくれた Ansgar に感謝します。

次のコード ブロックでは:

  • $input は、置換が実行されるテキスト行です
  • $regex は、サポートされている名前付きグループの少なくとも 1 つを含むことが確認されたファイルから読み取られた (タイプ [string] の) 正規表現です
  • $regexToGroupName は、[regex]::GetGroupNames() によって返される配列の順序に従って並べ替えられたグループ名の配列に正規表現文字列をマップするハッシュ テーブルです。表現
  • $groupNameToVersionNumber は、グループ名をバージョン番号にマップするハッシュ テーブルです。

$regex 内の名前付きグループに対する制約は、(私が思うに) 名前付きグループ内の式はネストできず、入力文字列内で最大 1 回一致する必要があるということだけです。

0 投票する
0 に答える
1047 参照

python - python正規表現:グループに複数回一致する

重複の可能性:
Python正規表現-ワイルドカード式から複数のグループをキャプチャする方法は?
グループ一致のPython正規表現

私はこれを行うためのより良いまたはより簡単な方法があることを知っていますが、私がそれを自分で試したがうまくいかなかったので、なぜ私は興味があるので、ここに問題があります:

正規表現を使用してXml属性を取得したいとします。次のXMLノードを見てみましょう。

を解析するNodeOtherNodeは、次の正規表現があります。

の出力pattern.findall(xml)は次のとおりです。

('Node'、'key2 = "val2"'、'key2'、'val2')('OtherNode'、''、''、'')

およびの出力[m.groupdict() for m in pattern.finditer(xml)]

最後のメタバーのみがグループとしてアクセスできるようです。

key1同様にどのように一致させるのkey2ですか?複数のグループを(...)*構成と一致させることはできませんか?言い換えると、正規表現がmeta存在する場合は、指定されたグループと複数回一致するようにします。

0 投票する
1 に答える
329 参照

c# - 一度に複数の一致するアイテムを見つけるための正規表現

したがって、文字列は次のとおりです。「DC:PPE Env:CH1 Slice:whatever to extract」または「babaasdfsd DC:PPE asdfas Env:CH1 or Slice:whatever」

基本的に、「DC:PPE」「Env:CH1」「Slice:whatever」を見つけて削除しようとしています。

次の正規表現を使用しています:(c#)

(?:^|\s+)私はSlice | Env | Dcが最初に表示されるか、先頭にスペースがあるかのいずれかに一致させようとしています。.*?\s+DC:PPE の後のスペースを非貪欲に一致させようとしています。

3 つのマッチすべてをまとめて返したいと思います。これの何が問題なのですか?

0 投票する
3 に答える
1829 参照

java - 等しい文字列での正規表現のn番目の一致

n番目の一致に一致するために正規表現のみを使用することは可能ですか(追加のコードはありません!)?例えば:

「車」-「電車」-「ボート」-「自転車」

BOATのみを照合したいので、照合の正規表現は「[AZ] +」になりますが、これは1番目、2番目、4番目にも一致します。

誰かがこれのための純粋な正規表現ソリューションを持っていますか?正規表現を使用するコードを変更できないため、これが必要ですが、正規表現を提供することはできます。

よろしく、ロビン

0 投票する
3 に答える
104 参照

java - ; で区切られている場合と区切られていない場合がある文字列を解析するための正規表現。いくつかのグループに

基準に応じて文字列をいくつかのグループに解析する必要がある場合があります

たとえば、以下;

2グループであること

最初の 01 は気にしないことに注意してください。そして、私はそれらすべてを独自のグループに含める必要があります。

もう一つ;

3 つのグループにする必要があります。

基本的に、英字が先か数字が先かを気にする必要はありません。問題は、0 回以上になる可能性がある式を独自にグループ化することです。以下の意味

の 1 つのグループも生成する必要があります。%3A%35r%07%01P%88%00

0 投票する
2 に答える
111 参照

python - グループ参照での正規表現の間違った特殊文字の結果

私の間違いは何ですか?

どのようにできるのか ?

0 投票する
1 に答える
304 参照

java - 日付の正規表現で月の部分を 1 文字省略

フォーマットの非常に単純な正規表現であるため、非常に奇妙dd/mmです。結果は次のようになるはずです"Group 1: 14; Group 2: 12"が、そうです"Group 1: 14; Group 2: 1"

2 番目のグループは最初の文字のみをキャプチャし、2 番目の文字 (例では「2」) を省略しました。

理由がわかりません。手伝っていただけませんか?

0 投票する
5 に答える
300 参照

python - 単純な python 正規表現でのオプションのグループ化

私がやりたいことは、2 つの連続する数字のインスタンスを文字列で検索することだけです。そのようなインスタンスが見つかった場合はそれをグループ化し、それ以外の場合はその特定のグループに対して何も返しません。これは些細なことだと思っていましたが、どこが間違っているのか理解できません。以下の例では、オプションの (?) 文字を削除すると数字が取得されますが、数字のない文字列では はrNone と評価されるため、r.groups() は例外をスローします。

# --- update/clarification --- #

答えてくれてありがとう。これは、私が理解していないことを正確に特定するための別の方法です。

結果が得られる理由は理解できますresult.group()が、なぜ結果が得られないのresult.groups()です('A', )か? 私はそれが次のように機能すると思いました: 正規表現が にヒットするzと、.*. すべてを照合するにもかかわらず.*、正規表現エンジンはオプションのグループを通過したことを認識しており、可能な場合は?照合を試みるため、逆方向に動作して照合を試みる必要があります。で置き換える?と、+return が返され('A', )ます。?これは、一致する必要がなければ一致しないことを示唆していますが、これは私がこの件に関して読んだ多くのもの (特に J. Friedl の優れた本) とは対照的であるように思われます。

0 投票する
1 に答える
162 参照

regex - このメールアドレス検証用の正規表現はどのように機能しますか?

電子メール アドレスの検証に使用される正規表現を検索しているときに、このページに出くわしました: http://www.regular-expressions.info/email.html。私はそれを理解できませんでした。

\b[A-Z0-9._%+-]+@(?:[A-Z0-9-]+.)+[AZ]{2,4}\b は john@server に一致します。 department.company.com であり、john@aol...com ではありません。

(?:[A-Z0-9-]+\.)どのように機能し、どのように一致しないか、他のものとどのように一致するかを詳しく説明できますjohn@aol...comか?

0 投票する
5 に答える
1182 参照

javascript - Javascript の正規表現でグループを定量化するにはどうすればよいですか?

文字列「QQxaxbxcQQ」があり、x の後に任意の文字が続くすべてのグループをキャプチャしたいとします。また、QQ 間のみを検索したい (文字列には他のものが含まれる場合があります)。私はこれがうまくいくと思いました:

ただし、これは最後の一致 (xc) のみを返すようです。正しい方向に私を向けることができますか?

編集:私の質問の最初のバージョンは単純化されすぎていました。元のレスポンダーに謝罪します。実際の問題に近づけるために編集しました。