Python 使用正则表达式提取后跟特定语法(如括号)的特定单词
我有一个非常大的文档,包含不同格式的章节参考。我想使用Python和regex提取这些引用 字符串格式的示例: 1) 第23节 2) 第45(3)条 3) 第75条第(e)点 4) 第21(1)、54(2)、78(1)条 现在,我有以下代码:Python 使用正则表达式提取后跟特定语法(如括号)的特定单词,python,regex,pattern-matching,Python,Regex,Pattern Matching,我有一个非常大的文档,包含不同格式的章节参考。我想使用Python和regex提取这些引用 字符串格式的示例: 1) 第23节 2) 第45(3)条 3) 第75条第(e)点 4) 第21(1)、54(2)、78(1)条 现在,我有以下代码: s = "This is a sample for Section 231" m = re.search('Section\\W+(\\w+)', s) m.group(0) 输出为:第231节 除了不考虑其他格式的情况外,这种方法非常有效 是否有任何
s = "This is a sample for Section 231"
m = re.search('Section\\W+(\\w+)', s)
m.group(0)
输出为:第231节
除了不考虑其他格式的情况外,这种方法非常有效
是否有任何方法表明对于231(1)
,也应提取(1)
?或者,如果列出了其他几个章节,是否包括以下章节编号
如果你认为正则表达式在这种情况下不是最好的,我也愿意使用其他库。谢谢大家! 试试看:
Sections?\W+(\w+)(\(\w+\))?(, (\w+)(\(\w+\))?)*
说明:
将“Section”与可选的Sections?
s
匹配节号/标题(如您所做),并在括号中添加可选文本\W+(\W+)(\(\W+\)?
允许在逗号和空格后重复节号模式(,(\w+)(\(\w+\)?)*
要排除另一本书的
第1节
,您可以使用单词边界和负前瞻的组合:
Sections?\W+(\w+)(\(\w+\))?(, (\w+)(\(\w+\))?)*\b(?! of)
确保匹配到单词末尾\b
检查单词边界后是否没有空格后跟(?!of)
of
Sections?( *\d+((\(\d+\))*,?(?= *))*)+
章节?
=章节
或章节
(*\d+(\(\d+\)*,?(?=*)*)+
=1或多个:0或多个空格,然后是1或多个数字,可选后跟大括号中的1或多个数字,然后可选逗号和0或多个空格
“trailing”空格使用正向前瞻,因此它不包括在匹配中,因此您不需要去掉尾随空格
谢谢!你知道我需要做什么来排除后面跟“of”一词的部分吗?例如“另一本书的第1节”。“的”倾向于表明它是对文档外部的引用。@如果我的回答回答了你原来的问题,请考虑接受/接受ITYES,它回答了我原来的问题!但编辑没有帮助,它只排除了78之后的(1),而没有其他内容(例如输出:第21(1)、54(2)、78'节)
Sections?( *\d+((\(\d+\))*,?(?= *))*)+