[回答第一部分,请滚动第二个问题编辑]
目前正在使用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
有什么想法吗?
答案 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})
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')