Python 在句号之间提取字符串,除非CO
我正在努力使用正则表达式来提取句号之间的字符串的一部分,但是如果句号前面有特定的字母(例如示例中的CO),则忽略它。我们可以假设相关块始终以“LTD”结尾 案例1:Python 在句号之间提取字符串,除非CO,python,regex,Python,Regex,我正在努力使用正则表达式来提取句号之间的字符串的一部分,但是如果句号前面有特定的字母(例如示例中的CO),则忽略它。我们可以假设相关块始终以“LTD”结尾 案例1: string = "FREDS CHIP SHOP. S & B SERVICES CO. & SONS LTD. 1-12 THE STREET" 我想要:“S&B服务有限公司” 案例2: string = "SOME TEXT. BUSINESS NAME LTD. 1-12 THE STREET" 我想
string = "FREDS CHIP SHOP. S & B SERVICES CO. & SONS LTD. 1-12 THE STREET"
我想要:“S&B服务有限公司”
案例2:
string = "SOME TEXT. BUSINESS NAME LTD. 1-12 THE STREET"
我想要“商业名称有限公司”
案例3:
string = "SIMPLE BUSINESS NAME LTD. 1-12 THE STREET"
我想要“简单商业名称有限公司”
我目前有:
#!/usr/bin/python
import sys
import re
vnumber_name = "FREDS CHIP SHOP. S & B SERVICES CO. & SONS LTD. 1-12 THE STREET"
#vnumber_name = "SOME TEXT. BUSINESS NAME LTD. 1-12 THE STREET"
#vnumber_name = "SIMPLE BUSINESS NAME LTD. 1-12 THE STREET"
def test(vnumber_name):
#ltd = re.search(r'.+\sLTD[.]?', vnumber_name)
ltd = re.search(r'[.?][\s]{1,2}(?:[^.]+|(?!CO.))LTD[.]?', vnumber_name)
if ltd:
print "got it: " + ltd.group(0)
else:
print "nothing"
test(vnumber_name)
这是不对的
我可以创建一些if子句,但如果只使用一行regex,那就太好了。您可能想豁免多个缩写,因此这里有一个更灵活的方法,使用“负lookback”:从字符串的开头匹配到不在特定字符串后面的下一个句点(
CO
或CORP
),非贪婪的*?
(后跟一个句点)使您匹配第一个这样的句点
.*?(?<!..CO|CORP)\.
*?(?
这将允许您正确地将字符串拆分为“句子”。如果你只对以有限公司结尾的案例感兴趣,那么你可以选择那些。非常感谢。我没有意识到有负面的回顾。谢谢你的解释。欢迎你。但是,除非你只打算匹配你作为例子给出的三个案例,否则你应该重新考虑你接受的答案:它与我举的例子不起作用你是对的!好的,我需要再考虑一下。谢谢你的提示。使用(或改编)有什么问题吗我的解决方案?没有-但我无法让它在脚本上工作。我得到:sre_常量。错误:向后看需要固定宽度的模式,但它在这里工作正常,所以我正在尝试解决它。