我有以下字符串:
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我想要匹配的是一个司法决定'处理'在更大的文本中。这些句柄中有很大的变化,但它们都是从一行的开头开始的。派对名称与最后日期之间的对比。大多数情况下,当事人的名字都是资本,但不仅限于此。我试图每个文档只有一个匹配,没有误报。
答案 0 :(得分:2)
我使用它来匹配所有这些(你需要添加不区分大小写的标志):
(^[a-z][a-z\'&\(\) ]+\bv\b[a-z&\'\(\) ]+(?:.*?) \[?\d+ \w+ \d{4}\]?)
<强>解释强>
(
开始捕获组
[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