0

単純な正規表現のキャプチャのように見えるものに問題があります。AutoItのstringRegExp()関数を使用しています。

ソース文字列は次のとおりです。

1 U:\some text here\more text over here\06-17-2011\Folder 2\161804\abc9831\xyz10007569.JPG

「abc9831」と「161804」をキャプチャしようとしています。「abc」の部分は、「abc」、「def」、または「ghi」の後に数字の文字列を続けることができます。「161804」は、任意のテキスト文字列に置き換えることができます。すべて大文字と小文字は区別されません。現在、次の正規表現パターンを使用しています。

(?i)\\\\.+\\\\((abc\d+)|(def\d+)|(ghi\d+))

ただし、「abc9831」の部分のみをキャプチャしています。その前のテキスト文字列を取得するにはどうすればよいですか?

4

3 に答える 3

0
(?i)\\\\(.+\\\\(abc\d+)|(def\d+)|(ghi\d+))

すべてを1つの文字列(間に挟んで)にしたい場合は、このトリックを実行する必要があります\

2つの別々のキャプチャが必要な場合:

(?i)\\\\(.+)\\\\((abc\d+)|(def\d+)|(ghi\d+))
于 2011-06-24T16:26:55.560 に答える
0

編集:新しいバージョン...

生の正規表現は\b(\d+)\\((?:abc|def|ghi)\d+)です。エスケープされた文字列は\\b(\\d+)\\\\((?:abc|def|ghi)\\d+)

于 2011-06-24T16:30:30.940 に答える
0

以下の正規表現をAutoItのStringRegExp()関数で使用すると(フラグ「1」を使用して一致の配列を返す)、。を返します161804\abc9831。これはあなたが返したいものですか?

.*\\([^\\]+\\[a-z]{3}\d+)\\.*

自分で実行できる例を次に示します。

#include <Array.au3>

$string = 'U:\some text here\more text over here\06-17-2011\Folder 2\161804\abc9831\xyz10007569.JPG'

$capture = StringRegExp($string,'.*\\([^\\]+\\[a-z]{3}\d+)\\.*',1)

_ArrayDisplay($capture)
于 2011-06-24T17:26:31.613 に答える