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

编辑:新版本...

原始正则表达式是\b(\d+)\\((?:abc|def|ghi)\d+). 转义的字符串是\\b(\\d+)\\\\((?:abc|def|ghi)\\d+)

于 2011-06-24T16:30:30.940 回答
0
(?i)\\\\(.+\\\\(abc\d+)|(def\d+)|(ghi\d+))

如果你想把它全部放在一个字符串中(中间有一个\),应该可以解决问题。

如果您想要两个单独的捕获:

(?i)\\\\(.+)\\\\((abc\d+)|(def\d+)|(ghi\d+))
于 2011-06-24T16:26:55.560 回答
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 回答