【问题标题】:Regex matching wrong pattern正则表达式匹配错误的模式
【发布时间】:2013-11-25 19:15:48
【问题描述】:

我正在尝试使用正则表达式从 word 文档中提取文本,向前看并在这个答案中查看 foudn:

Regular Expression to find a string included between two characters while EXCLUDING the delimiters

我必须使用的分隔符是

开始:RQ

结束:END-RQ

我添加了以下(powershell)代码:

$regex = [regex] '(?<=RQ)(.*?)(?=END-RQ)' 

$matches = $regex.Matches($concat) 

问题是匹配是从 END-RQ 中获取 RQ 作为下一个模式的开始。谁能告诉我如何消除它(例如强制正则表达式完全匹配 RQ 和 END-RQ)?将匹配模式用引号括起来似乎不起作用,即使引号被转义。

【问题讨论】:

  • 在这种特殊情况下并假设您所有的“RQ...END-RQ”都是平衡的,使用:RQ((?&gt;[^E]+|E(?!ND-RQ))*)END-RQ 是不是更简单(并且可能更快),然后提取捕获组(因为您使用捕获组)?
  • 组必须保持平衡。感谢您指出这一点。

标签: c# regex powershell


【解决方案1】:

试试这个:

$regex = [regex] '(?<=(?<!END-)RQ)(.*?)(?=END-RQ)'

【讨论】:

    【解决方案2】:

    你应该下载这个应用程序:

    http://www.sellsbrothers.com/posts/Details/12425

    尝试调试正则表达式是无价的。

    【讨论】:

    • 太棒了。我迫不及待想试试这个!感谢您的链接。
    【解决方案3】:

    这可能有效(如果不确切知道您的数据是什么就很难说):

    $regex = [regex]'(?<=(?:^|[^-])RQ)(.*?)(?=END-RQ)'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多