同じ行で2つのことをファイルで検索する方法があるかどうか知りたいのですが。たとえば、「変数> =」と「変数> =」の行を検索する場合です。問題は、「変数」が何であるかわからないことです(ファイルにはさまざまな変数がたくさんあり、1行で重複する変数チェックを検索しています)。
誰かがこれで私を助けることができますか?
いくつかのオプションがあります...
開始する前にいずれかの方法:
variable >= something
やhour >= NUM
のようなパターンの重複を探していると仮定します。あなたは重複を知っていて、それらを明示的に見つけることができます、例えば:
((variable)\s*>=\s*\S+)(.*)(\2\s*>=\s*\S+)
または、「時間」の場合は、「変数」という単語を「時間」という単語に置き換えます。
((hour)\s*>=\s*\S+)(.*)(\2\s*>=\s*\S+)
説明:
左から右への括弧のすべてのセットはグループです。したがって、次のようになります。
グループ1:((variable)\s*>=\s*\S+)
:「変数」で始まり、その後に\s
(スペース)が続く文字列を検索します。*
は任意の文字列を意味しますスペースの数(したがって、「変数> =」または「変数> =」を使用できます)、文字>=
、さらに\s*
(任意のスペース)、最後に任意の非スペース文字\S+
(+
は、少なくとも1つ)。
グループ2:(variable)
:グループ2はグループ1内にあり、「変数」という名前を抽出する方法にすぎません。
グループ3:(.*)
:2つの重複の間にあるもの。これにより、この余分なテキストが存在する場合は、それを使用して何かを行うことができます。
警告、3つ(またはそれ以上)ある場合、これは中央のパターンを消費し、group1とgroup4に最初と最後の重複のみが含まれるようにします。連続する重複を見つけたい場合は、この部分を(.*?)
に変更します。 ?
はそれを欲張りでないものにします。つまり、最小の.
(何でも)を見つけます。
グループ4:(\2\s*>=\s*\S+)
:最後にこれは重複です。重複している理由は、パターンがグループ1と同じであるためです。ただし、\2
を使用します。これは、グループ2にあるものを表すための方法です。この場合は「変数」という単語です。
表示される「時間」の2番目のパターンは、「変数」ではなく「時間」を検索することを除いて、同じです。
少し変更を加えるだけで、同じパターンの重複を検索できます。
((\w+)\s*>=\s*\S+)(.*)(\2\s*>=\s*\S+)
説明:
これは、明示的に既知の名前を持つ重複を見つけることと同じです。ここでの違いは、「変数」/「時間」のような単語の代わりに、\w+
(任意の英数字の単語)を使用することです。
\w+
:\w
は、任意のWord文字(大文字、小文字、数字を含みますが、句読点やその他の記号は含みません)に一致します。 +
は、少なくとも1つを言う方法です。したがって、\w+
を使用すると、英数字の単語を見つけることができます。
variable\s*?>=.*?variable\s*?>=