【问题标题】:Regular expression problem with back slashes反斜杠的正则表达式问题
【发布时间】:2011-09-22 04:23:21
【问题描述】:

我在处理看似简单的正则表达式捕获时遇到了问题。我正在使用 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”部分。怎么提取前面的文本字符串?

【问题讨论】:

  • 在问了 9 个问题后,我们可以期待您了解格式化的基础知识。请格式化您的问题以提高可读性。
  • @darkdust,当我在原始帖子中使用双斜杠时,它们在下面的预览窗口中显示为单斜杠。这就是我使用 4 个斜线的原因。你是这个意思吗?
  • 不,我的意思是缩进正则表达式,使其像代码一样显示。琥珀是为你做的。请下次尝试格式化更好,谢谢。
  • 好的,谢谢你告诉我。

标签: regex autoit


【解决方案1】:

当 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)

【讨论】:

    【解决方案2】:

    编辑:新版本...

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

    【讨论】:

    • @sigil,我添加了转义形式。这符合您的需求吗?
    • 不,这没有从字符串中捕获任何内容。看起来您的模式正在尝试捕获“abc9831”,然后在其后输入文本;我正在尝试获取“abc9831”及其前面的文字。在任何情况下,该模式都没有返回任何匹配项。
    • @sigil。我添加了一个新的。它使用单词边界 \b 来检测 161804 的开头,但您可以使用正向后视代替:(?&lt;=/)
    【解决方案3】:
    (?i)\\\\(.+\\\\(abc\d+)|(def\d+)|(ghi\d+))
    

    如果你想把它全部放在一个字符串中(在两者之间有一个\),应该可以做到这一点。

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

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

    【讨论】:

    • 不,那仍然只是在拿起 abc9831。也许这是一个特定于 autoit 的正则表达式问题?
    猜你喜欢
    • 1970-01-01
    • 2012-06-01
    • 2015-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多