在python中使用以下字符串
arr.length-1
我尝试创建一个regit表达式,将部分,标题和页码分为3组。到目前为止我已经
了for (int i = arr.length - 1; i >= 0; i--) {
System.out.println(arr[i] + " ");
}
可以处理除(RFI)以外的所有情况。我怎么能抓住这个呢? 注意:有时字符串可能包含我不想要的小写子部分。这就是[^ a-z]存在的原因。此外,RFI可能并不总是括号中的文本。
更新
1 - GENERAL 1
1.1 RELATED DOCUMENTS 1
1.2 SUMMARY 1
1.3 DEFINITIONS 1
1.4 INFORMATIONAL SUBMITTALS 2
1.5 GENERAL COORDINATION PROCEDURES 2
1.6 COORDINATION DRAWINGS 3
1.7 REQUESTS FOR INFORMATION (RFIs) 4
1.8 PROJECT MEETINGS 6
答案 0 :(得分:2)
您的字符串中主要包含三个部分。
首先是主要由数字后跟小数和数字
组成的部分其次是页码的任何内容。这主要从单词
开始第三个是最后的页码,通常是位数
您的正则表达式包含太多不需要的替换。 所以你可以使用这个正则表达式
^\s*(\b\d+(?:[.]\d+)?)\W+(.*?)\s*(\b\d+\b)$
<----------------> <---> <------->
Section Content Page Number
<强> Regex Demo 强>
如果子部分可以包含1.1.1
等值,则可以使用
^\s*(\b\d+(?:[.]\d+)*)\W+(.*?)\s*(\b\d+\b)$
正则表达式细分
\W
相当于[^\w]
,而[^A-Za-z0-9_]
依次为^
(请注意^ #start of string \s* #Match any spaces in starting ( \b #word boundary \d+ #Match digits (?:[.]\d+)* #Non-capturing group to match . followed by digits any #number of times(due to *). It matches after . like .1.1 etc ) \W+ #Match any non word character (.*?) #Match anything upto page number given in next \s* #Match spaces if there (\b\d+\b) #Match page numbers in last(due to $). $ #End of string
表示匹配除字符类中的内容之外的任何内容)
//change i from arr.length to i = arr.length-1
//change i>0 to i>=0
//change arr[i-1] to arr[i]
for(int i = arr.length-1; i >= 0;i--){
System.out.print(arr[i ]+" ");
}
答案 1 :(得分:0)
我推荐这样的东西
^\s*([\d.]+)[\s-]*\s+(.+?)\s+(\d+)$
既然你说你在使用python,那么当你提到评论之类的东西时,这会为你提供更多的能力。例如:
^\s*(?#Section)([\d.]+)[\s-]*\s+(?#Title)(.+?)\s+(?#Page)(\d+)$
正则表达式是超级强大的,但如果你是新手还是刚刚练习,通常是不可读的。在这些情况下,评论是天赐之物!
完整的实现如下所示:
re.search(r'^\s*(?#Section)([\d.]+)[\s-]*\s+(?#Title)(.+?)\s+(?#Page)(\d+)$', input_string, re.M)
其中re.M表示它应该在MULTILINE模式下运行,使^匹配每行的开头而不是整个输入的开头。 $和行尾/输入相同