【问题标题】:How to get the content of parentheses but not the parentheses themselves如何获取括号的内容而不是括号本身
【发布时间】:2013-12-21 04:23:47
【问题描述】:

我有这种文本1323-DI-004 (2013-07-16).pdf,我想将日期放在括号中。我尝试使用正则表达式(\(.*)\)。它给了这个(2013-07-16)。我想得到相同的结果,但没有括号。

这是一个 VBA 代码。

有可能吗?怎么做?

【问题讨论】:

    标签: regex vba


    【解决方案1】:

    编辑:您使用的是 VBA,所以

    Dim myMatches As MatchCollection
    Set myRegExp = New RegExp
    myRegExp.Pattern = "\((.*)\)"
    Set myMatches = myRegExp.Execute(subjectString)
    MsgBox(myMatches(1).Value) 'I think this be your reference? You may need to iterate myMatches to get the right one
    

    假设这是一个完全符合 PCRE 的匹配平台(PHP、PERL 等 -- 不是 javascript),请使用 lookarounds 来实现这一点,匹配任一侧的 () 而不包括他们在捕获中:

    (?<=\()(.*)(?=\))
    

    查看实际操作:http://regex101.com/r/oI3gD6

    如果您使用的是 javascript,这将不起作用,但是您可以使用 \((.*)\) 并检索第一个捕获组,这将是 () 中的内容。

    【讨论】:

    • 这是针对 VBA 的,我认为不可能有每个组。
    • @Dougui VBA 确实似乎不支持lookbehind,但你应该能够使用组(基于this post,这一行 - matches(0).Value - 大概你可以做到matches(1).Value获得第一组)。
    • 类“MatchCollection”似乎不存在。最后,我做到了:Replace(Replace(ExtractDate(Path), "(", ""), ")", "")。丑陋的解决方案,但它的工作原理。
    猜你喜欢
    • 1970-01-01
    • 2015-08-08
    • 2011-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-17
    • 2020-07-05
    • 2022-12-08
    相关资源
    最近更新 更多