如何使用RE来查找在特定文本后出现的字符串?

时间:2013-02-07 14:08:43

标签: python regex

我有许多大文件,其中包含我需要提取的一些字符串。数据如下:

"text":"string","token":"1357580140-7","display_token":0,"display_ttl":1357828250,"coeff2_ts":"2013-01-08","timestamp":1357845041}}

我做了一些研究,并认为RE是最好的。我只需要打印出“string”而不是“text”:bit。所需的输出只是“字符串”

def regEx():
os.chdir("C:/Users/Luke/Desktop/FilesWithString")
files = os.listdir(".")
for x in files:
    re.search(r'(?<="text":)("[^"]+")',x).group(0)

3 个答案:

答案 0 :(得分:2)

你可以使用lookbehind:

your_string = '"text":"string"'
match = re.search(r'(?<=:)("[^"]+")',your_string)
if match:
    print match.group(0) #'"string"'

这会在:之后立即捕获用双引号括起来的任何内容。

作为旁注,使用更新的字符串,它看起来非常像JSON - 或ast.literal_eval可以处理的内容。如果是这种情况,您可以使用其中任何一个将其评估为一个字典,您可以直接下标以获取字符串。

答案 1 :(得分:1)

你有一个JSON字符串,只需使用json module将其解码为Python结构:

import json

data = json.loads(inputstring)

print data['somekey']['token']
print data['somekey']['display_ttl']

答案 2 :(得分:0)

如果没有re:

,你可以更快地完成
s = '"text":"string"'
print s[7:]
>>> "string"

如果text部分沿着不同的线变化,你可以测量它的长度 - 通过在冒号上分割线并取第一部分:

s = '"a text":"a string"'
s[len(s.split('":')[0]) + 2:]
>>> '"a string"'

甚至更有效率,使用index函数:

s = '"a text":"a string"'
s[s.index('":') + 2:]
>>> '"a string"'