除非CO,否则在完全停止之间提取字符串

时间:2012-12-06 11:14:50

标签: python regex

我正在努力使用正则表达式来提取fullstops之间的字符串的一部分,但如果前面有特定的字母(例如示例中的CO),则忽略一个句号。我们可以假设相关的块总是以“LTD。”结尾。

案例1:

string = "FREDS CHIP SHOP.  S & B SERVICES CO. & SONS LTD. 1-12 THE STREET"

我想:"S & B SERVICES CO. & SONS LTD."

案例2:

string = "SOME TEXT.  BUSINESS NAME LTD. 1-12 THE STREET"

我想要"BUSINESS NAME LTD."

案例3:

string = "SIMPLE BUSINESS NAME LTD. 1-12 THE STREET"

我想要"SIMPLE BUSINESS NAME LTD."

我目前有:

#!/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子句,但用一行正则表达式来获取它会很棒。

1 个答案:

答案 0 :(得分:0)

你可能想要豁免多个缩写,所以这里使用“负面观察”更灵活:从字符串的开头到下一个的句点跟随某些字符串(此示例为COCORP。非贪婪的.*?(后跟一段时间)会使您匹配第一个这样的时段。

.*?(?<!..CO|CORP)\.

这将允许您将字符串正确分解为“句子”。如果您只对那些以LTD结尾的那些感兴趣,那么您可以选择那些。