【问题标题】:Regular expression to match (, but not \(正则表达式匹配 (,但不匹配 \(
【发布时间】:2013-03-06 22:49:40
【问题描述】:

我正在尝试创建一个正则表达式来匹配字符串中的每个 ( 和 ),但排除 \( 和 \)。这样我就可以替换每个括号,但保留前面带有斜线的括号。

示例字符串:(,)(5)(5)( )(\()(9)(1)(87x)(100 )(ASP\)( )(5)

编辑: 替换后的期望结果:,55 \(9187x100 ASP\) 5 然后我可以删除 \ 并获得我想要的字符串 ,55 (9187x100 ASP) 5

编辑:我正在使用 VB.NET

【问题讨论】:

标签: regex


【解决方案1】:

这将匹配前面没有斜线的括号(以及前面的字符):

[^\\]\(

【讨论】:

  • 这将无法匹配字符串开头的左括号,就像他在他的示例中所做的那样。
【解决方案2】:

嗯,你必须考虑上下文。所以首先你不想拥有\,然后你想要()

[^\\]\(
[^\\]\)

但是你可以把两个括号放在一个字符类中

[^\\][\)\(]

【讨论】:

    【解决方案3】:

    使用look-behind,您只能匹配没有立即以“\”开头的“(”或“)”:

    /(?<!\\)[\(\)]/
    

    【讨论】:

    • 使用后视是否比否定字符类更有优势?
    • 后视不消耗字符,因此您不会遇到匹配超过您想要替换的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多