我试图写正则表达式来识别以 MR|MS|THE|DR 开头的名字
例如
HONOURABLE THE CHIEF JUSTICE MR. JUSTICE
1 VIKRAM NATH,HONOURABLE MR. JUSTICE 1 1 0 3 5
J.B.PARDIWALA
HONOURABLE THE CHIEF JUSTICE MR. JUSTICE
2 VIKRAM NATH,HONOURABLE MR. JUSTICE VIPUL M. 0 1 0 0 1
PANCHOLI
HONOURABLE THE CHIEF JUSTICE MR. JUSTICE
3 VIKRAM NATH,HONOURABLE MR. JUSTICE ASHUTOSH 107 4 10 6 127
J. SHASTRI
Run Code Online (Sandbox Code Playgroud)
所以,输出应该是
[THE CHIEF JUSTICE MR. JUSTICE VIKRAM NATH, MR. JUSTICE J.B.PARDIWALA]
[THE CHIEF JUSTICE MR. JUSTICE VIKRAM NATH, MR. JUSTICE VIPUL M. PANCHOLI]
and so on
Run Code Online (Sandbox Code Playgroud)
但我得到
THE CHIEF JUSTICE MR. JUSTICE VIKRAM NATH
MR. JUSTICE 1 1 0 3 5
J.B.PARDIWALA
Run Code Online (Sandbox Code Playgroud)
我试过了 \s*HONOURABLE\s+(?=THE|MR|MS|DR)([^/\[\]\n]*)
HONORABLE 可以重复任何编号。次。
任何帮助,将不胜感激
提前致谢!
Wik*_*żew 10
赏金答案
您可以使用
import re
text = """ HONOURABLE THE CHIEF JUSTICE MR. JUSTICE
1 VIKRAM NATH,HONOURABLE MR. JUSTICE 1 1 0 3 5
J.B.PARDIWALA
HONOURABLE THE CHIEF JUSTICE MR. JUSTICE
2 VIKRAM NATH,HONOURABLE MR. JUSTICE VIPUL M. 0 1 0 0 1
PANCHOLI
HONOURABLE THE CHIEF JUSTICE MR. JUSTICE
3 VIKRAM NATH,HONOURABLE MR. JUSTICE ASHUTOSH 107 4 10 6 127
J. SHASTRI"""
text = re.sub(r'^[\d \t]+|[\d \t]+$', '', text, flags=re.M)
#print(text)
m = re.findall(r'^HONOURABLE\s+(.*(?:\n(?!HONOURABLE\b).*)*)', text, re.M)
for x in m:
print(x.replace('\n',' '))
Run Code Online (Sandbox Code Playgroud)
输出:
[
'THE CHIEF JUSTICE MR. JUSTICE VIKRAM NATH,HONOURABLE MR. JUSTICE J.B.PARDIWALA',
'THE CHIEF JUSTICE MR. JUSTICE VIKRAM NATH,HONOURABLE MR. JUSTICE VIPUL M. PANCHOLI',
'THE CHIEF JUSTICE MR. JUSTICE VIKRAM NATH,HONOURABLE MR. JUSTICE ASHUTOSH J. SHASTRI'
]
Run Code Online (Sandbox Code Playgroud)
请参阅Python 演示。
详情:
re.sub(r'^[\d \t]+|[\d \t]+$', '', text, flags=re.M)
从文本中每行的开头和结尾删除所有空格、制表符和数字。
r'^HONOURABLE\s+(.*(?:\n(?!HONOURABLE\b).*)*)'
是与“修剪”文本中的以下内容匹配的正则表达式:
^
- 一行的开始
HONOURABLE
- 一个字 HONOURABLE
\s+
- 一个或多个空格
(.*(?:\n(?!HONOURABLE\b).*)*)
- 捕获组 1:
.*
- 该行的其余部分(?:\n(?!HONOURABLE\b).*)*
- 零个或多个不HONOURABLE
以整个单词开头的行。原始答案 您可以使用
[
'THE CHIEF JUSTICE MR. JUSTICE VIKRAM NATH,HONOURABLE MR. JUSTICE J.B.PARDIWALA',
'THE CHIEF JUSTICE MR. JUSTICE VIKRAM NATH,HONOURABLE MR. JUSTICE VIPUL M. PANCHOLI',
'THE CHIEF JUSTICE MR. JUSTICE VIKRAM NATH,HONOURABLE MR. JUSTICE ASHUTOSH J. SHASTRI'
]
Run Code Online (Sandbox Code Playgroud)
请参阅正则表达式演示。如果您不想在结果列表项中包含换行符,您可以稍后将其替换为.replace('\n', ' ')
. 如果您想在[
、\
和处限制匹配项的右侧边界]
,请将它们添加到否定字符类中,更改[^,]
为[^][/,]
。
详情:
\bHONOURABLE
- 一个完整的词 HONOURABLE
\s+
- 一个或多个空格((?:THE|MR|MS|DR)[^,]*)
- 捕获组 1:THE
, MR
, MS
,DR
后跟零个或多个除逗号以外的字符。看一个Python 演示:
\bHONOURABLE\s+((?:THE|MR|MS|DR)[^,]*)
Run Code Online (Sandbox Code Playgroud)
输出:
import re
rx = r"\bHONOURABLE\s+((?:THE|MR|MS|DR)\b[^,]*)"
text = "HONOURABLE THE CHIEF JUSTICE MR. JUSTICE\nVIKRAM NATH,HONOURABLE MR. JUSTICE ASHUTOSH\nJ. SHASTRI, HONOURABLE MS. ADITI GUPTA"
m = re.findall(rx, text)
print([x.replace('\n','') for x in m])
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
255 次 |
最近记录: |