Регулярное выражение с косой чертой - PullRequest
0 голосов
/ 24 июня 2011

У меня проблемы с тем, что кажется простым захватом регулярных выражений. Я использую функцию AutoReit 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". Как мне взять текстовую строку, предшествующую ей?

Ответы [ 3 ]

0 голосов
/ 24 июня 2011

Редактировать: Новая версия ...

Необработанное регулярное выражение \b(\d+)\\((?:abc|def|ghi)\d+). Экранированная строка \\b(\\d+)\\\\((?:abc|def|ghi)\\d+)

0 голосов
/ 24 июня 2011

Если приведенное ниже регулярное выражение используется в функции 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)
0 голосов
/ 24 июня 2011
(?i)\\\\(.+\\\\(abc\d+)|(def\d+)|(ghi\d+))

должен сделать трюк, если вы хотите, чтобы все было в одной строке (с \ между).

Если вы хотите два отдельных захвата:

(?i)\\\\(.+)\\\\((abc\d+)|(def\d+)|(ghi\d+))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...