正则表达式2.7

2024-06-17 11:54:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在修补Regex,我正在尝试编辑一个字符串,以便它可以执行以下操作。。。你知道吗

原文

Mr. Bob had 1.3 pounds, he didn't have much. Did he care? Joe Bloggs, Esq. thinks he does. However, he paused... But, what will you do with the .7?

实际结果

Mr. 
Bob had 1.3 pounds, he didn't have much. 
Did he care? 
Joe Bloggs, Esq. thinks he does. 
However, he paused... But, what will you do with the .7?

预期结果

Mr. Bob had 1.3 pounds, he didn't have much.
Did he care?
Joe Bloggs, Esq. thinks he does.
However, he paused...
But, what will you do with the .7?

到目前为止我的陈述是。。你知道吗

print re.sub(r'(?<!..\.|.Mr|Esq|Mrs|.Ms)[.?]\s+', '\\g<0>\n', s)

Tags: havebobhemrjoehaddidmuch
3条回答

我已经改变了你对正则表达式的负面看法。它适用于提供的输入。不知道它对你的其他人会有什么反应。你知道吗

print re.sub(r'(?<!Mr)(?<!Esq)(?<!Mrs)(?<!Ms)[.?!]\s+', '\\g<0>\n', s)

你可以把后面的负片分开,这样就可以克服固定宽度的图案要求-

r'(?<!Mr)(?<!Mrs)(?<!Ms)(?<!Esq)(?<!e.g)(?<!i.e)[.?]\s+'

这起作用-

>>> print re.sub(r'(?<!Mr)(?<!Mrs)(?<!Ms)(?<!Esq)(?<!e.g)(?<!i.e)[.?]\s+', '\\g<0>\n', s)
Mr. Bob had 1.3 pounds, he didn't have much. 
Did he care? 
Joe Bloggs, Esq. thinks he does. 
However, he paused... 
But, what will you do with the .7?

>>> 

正则表达式有.Mr,这要求Mr前面有另一个字符。但是您的Mr出现在字符串的开头,因此前面没有字符。你知道吗

使用内置的re模块,我看不到任何明显的解决方法。它要求lookbehinds有一个固定的长度,因此不可能同时为EsqMr设置一个lookbehind,而不加任何前缀。但是,regex库没有这个限制,因此您可以使用该库,使用更简单的regex引导:

>>> print regex.sub(r'(?<!\.|Mr|Esq|Mrs|Ms)[.?]\s+', '\\g<0>\n', s)
Mr. Bob had 1.3 pounds, he didn't have much. 
Did he care? 
Joe Bloggs, Esq. thinks he does. 
However, he paused... But, what will you do with the .7?

(编辑:其他答案现在已经表明,可以使用re通过使用单独的lookbehind来完成。不过,它可能还是值得一看的regex,它与re有一些有用的区别。)

相关问题 更多 >