python正则表达式匹配可选方括号

时间:2014-08-26 16:03:03

标签: python regex optional brackets square-bracket

我有以下字符串:

1 "R J BRUCE & OTHERS V B J & W L A EDWARDS And Ors CA CA19/02 27 February 2003",     
2 "H v DIRECTOR OF PROCEEDINGS [2014] NZHC 1031 [16 May 2014]",  
3 '''GREGORY LANCASTER AND JOHN HENRY HUNTER V CULLEN INVESTMENTS LIMITED AND  
ERIC JOHN WATSON CA CA51/03 26 May 2003''' 

我正在尝试找到一个匹配所有这些的正则表达式。我不知道如何在字符串末尾的日期周围匹配可选的方括号,例如[2014年5月16日]。

casename = re.compile(r'(^[A-Z][A-Za-z\'\(\) ]+\b[v|V]\b[A-Za-z\'\(\) ]+(.*?)[ \[ ]\d+    \w+ \d\d\d\d[\] ])', re.S) 

最后的日期正则表达式只匹配方括号中的日期而不是没有的日期。

感谢所有回答的人。 @Matt Clarkson我想要匹配的是一个司法决定'处理'在更大的文本中。这些句柄中有很大的变化,但它们都是从一行的开头开始的。派对名称与最后日期之间的对比。大多数情况下,当事人的名字都是资本,但不仅限于此。我试图每个文档只有一个匹配,没有误报。

3 个答案:

答案 0 :(得分:2)

我使用它来匹配所有这些(你需要添加不区分大小写的标志):

(^[a-z][a-z\'&\(\) ]+\bv\b[a-z&\'\(\) ]+(?:.*?) \[?\d+ \w+ \d{4}\]?)

Regex Demo

<强>解释

  • (开始捕获组
    • [a-z\'&\(\) ]+匹配此群组中的一个或多个字符
    • \b匹配字边界
    • v字面匹配字符'v'
    • \b匹配字边界
    • [a-z&\'\(\) ]+匹配此群组中的一个或多个字符
    • (?:开始非捕获组
      • .*?匹配任何内容
    • )结束非捕获组
    • \[?\d+ \w+ \d{4}\]?匹配日期,可选择用括号括起来
  • )结束捕获组

答案 1 :(得分:1)

Using your regex并输入字符串,看起来你只会匹配第二行(如果你在正则表达式的开头摆脱了&#39; ^&#39;我&#39; ve为您提供的正则表达式的每个部分添加了内联注释,以使其更清晰。

你能指出你想要从每一行捕获的内容吗?你想要整个字符串吗?只有在单独的字母前面的单词&#39; v&#39;?你想要单独捕捉日期吗?

根据您要捕获的部分,每个部分可以分成各自的匹配组:regex101.com example。这比你的稍微宽松一些(在引号之间捕捉整个部分而不是仅仅在单独的单词之前的单词),并且分开以帮助提高可读性(每个&#34;组&#34; ;在它自己的路线上。)

This example也假设换行是故意的,并且支持换行组件(警告:它可能比你想要的更多,取决于最后的日期是否匹配)。

答案 2 :(得分:0)

如何使方括号可选,可以这样实现:

[\[]* *使[开头可选。

如果我可以提出一些建议:

  • \d\d\d\d也可以这样表达\d{4}

  • 正则表达式中的
  • [v|V] []中的内容已经是|已经不存在[vV]

这是 online demo