Python正则表达式分隔字符串

时间:2014-10-12 18:44:55

标签: python regex string

[回答第一部分,请滚动第二个问题编辑]

目前正在使用python编写Web scraper。 我有以下示例字符串:

Columbus Blue Jackets at Buffalo Sabres - 10/09/2014

我想拆分它以便我[哥伦布蓝夹克,Buffalo Sabers,2014年9月9日]

我阅读了正则表达式,包括本网站上的一些答案,但无法弄清楚如何格式化我的特定示例。我能想到的最好的东西是这样的,虽然它不起作用。

re.split('\w+\s\w\w\s\w+\s\.\s\w+', teams)

我的第二次尝试是: re.split("\w+\s'at'\s\w+\s'-'\s\w+", teams),但我不确定你是否甚至可以在正则表达式函数中输入['at'和' - ']之类的确切字符串。

请让我知道我在使用正则表达式函数出错的地方,或者是否有其他方法可以在python中划分我的特定示例。

(另请注意,每个团队的团队名称可以是2或3个单词,例如Montreal Canadiens at Buffalo Sabres

编辑: re.split(r"\s+at\s+|\s+-\s+", teams)似乎可以解决问题。但是我现在有第二个问题。在它自己的文件中测试它,这是有效的,但在我的程序中由于某种原因它没有。

代码:

def getTable(url):
    currentMatchup = Crawl.setup(url)
    teams = currentMatchup.title.string
    print(teams)
    re.split(r"\s+at\s+|\s+-\s+", teams)
    print(teams)

输出结果为:

Columbus Blue Jackets at Buffalo Sabres - 10/09/2014
Columbus Blue Jackets at Buffalo Sabres - 10/09/2014

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

print re.split(r"\s+at\s+|\s+-\s+",teams)

输出:['Columbus Blue Jackets', 'Buffalo Sabres', '10/09/2014']

试试这个。你可以在一行中完成。这里teams就是你的字符串。这会给你想要的结果。

编辑:

def getTable(url):
    currentMatchup = Crawl.setup(url)
    teams = currentMatchup.title.string
    print(teams)
    y=re.split(r"\s+at\s+|\s+-\s+", teams)
    print(y)

答案 1 :(得分:1)

您可以根据<space>at<space><space>-<space>

拆分输入字符串
>>> s = "Columbus Blue Jackets at Buffalo Sabres - 10/09/2014"
>>> re.split(r'\s+(?:at|-)\s+', s)
['Columbus Blue Jackets', 'Buffalo Sabres', '10/09/2014']
>>> s = 'Montreal Canadiens at Buffalo Sabres - 10/09/2014'
>>> re.split(r'\s+(?:at|-)\s+', s)
['Montreal Canadiens', 'Buffalo Sabres', '10/09/2014']

通过re.findall功能,

>>> s = "Columbus Blue Jackets at Buffalo Sabres - 10/09/2014"
>>> re.findall(r'\b[A-Z]\S+(?:\s+[A-Z]\S+){1,}|(?<=-\s)\S+', s)
['Columbus Blue Jackets', 'Buffalo Sabres', '10/09/2014']

答案 2 :(得分:0)

将它们捕获到具有懒惰点匹配全部重复的组中。

(.*?)\s+at\s+(.*?)\s+-\s+(\d{2}/\d{2}/\d{4})

Demo


import re;

match = re.search(r"(.*?)\s+at\s+(.*?)\s+-\s+(\d{2}/\d{2}/\d{4})", "Columbus Blue Jackets at Buffalo Sabres - 10/09/2014")
print match.groups()

# ('Columbus Blue Jackets', 'Buffalo Sabres', '10/09/2014')