正则表达式从模式中提取多个字段

时间:2014-10-20 14:13:14

标签: python regex

我在txt文件中有这样的模式:

["kiarix moreno","116224357500406255237","z120gbkosz2oc3ckv23bc10hhwrudlcjy04",1409770337,"com.youtube.www/watch?v\u003dp1JPKLa-Ofc:https","es"]

我需要一个正则表达式来提取python中的每个字段。每个字段可以包含任何字符(不仅仅是字母数字),除了第4个是长数字。我该怎么做?非常感谢。

编辑:该文件包含其他html元素,这就是为什么我不能直接在python列表中解析它。

4 个答案:

答案 0 :(得分:1)

以下提供了三种获取数据的不同选项:

>>> TEXT = '["kiarix moreno","116224357500406255237","z120gbkosz2oc3ckv23bc10hhwrudlcjy04",1409770337,"com.youtube.www/watch?v\u003dp1JPKLa-Ofc:https","es"]'
>>> import json, ast, re
>>> json.loads(TEXT)
['kiarix moreno', '116224357500406255237', 'z120gbkosz2oc3ckv23bc10hhwrudlcjy04', 1409770337, 'com.youtube.www/watch?v=p1JPKLa-Ofc:https', 'es']
>>> ast.literal_eval(TEXT)
['kiarix moreno', '116224357500406255237', 'z120gbkosz2oc3ckv23bc10hhwrudlcjy04', 1409770337, 'com.youtube.www/watch?v=p1JPKLa-Ofc:https', 'es']
>>> re.search(r'\["(?P<name>[^"]*)","(?P<number1>[^"]*)","(?P<data>[^"]*)",(?P<number2>\d*),"(?P<website>[^"]*)","(?P<language>[^"]*)"\]', TEXT).groupdict()
{'website': 'com.youtube.www/watch?v=p1JPKLa-Ofc:https', 'number2': '1409770337', 'language': 'es', 'data': 'z120gbkosz2oc3ckv23bc10hhwrudlcjy04', 'number1': '116224357500406255237', 'name': 'kiarix moreno'}
>>> 

特别是,您的正则表达式如下:r'\["(?P<name>[^"]*)","(?P<number1>[^"]*)","(?P<data>[^"]*)",(?P<number2>\d*),"(?P<website>[^"]*)","(?P<language>[^"]*)"\]'

答案 1 :(得分:0)

"([^"]*")|(\d+)

你可以尝试一下。抓住比赛。见演示。

http://regex101.com/r/dK1xR4/5

答案 2 :(得分:0)

你可以  1)打开文件。 2)使用 getline 扫描每一行。 3)使用 split()功能分割使用&#34;,&#34;然后使用生成的元组/列表  但是你想要。

答案 3 :(得分:0)

我要将retry/exceptast.literal_eval和文件组合起来阅读所有可能的元素,同时避免跨越几行的任何[],因此readline将无效。

这是我的解决方案:

import re
import ast

# grab all possible lists in the file
found = re.findall(r'\[.*\]', open('yourfile.txt' ,'r').read())

for each in found:
    try:
        for el in ast.literal_eval(each):
            print el
    except SyntaxError:
        pass


kiarix moreno
116224357500406255237
z120gbkosz2oc3ckv23bc10hhwrudlcjy04
1409770337
com.youtube.www/watch?v\u003dp1JPKLa-Ofc:https
es