如何使用正则表达式python在引号内提取值?

时间:2018-03-01 20:03:41

标签: python regex python-3.x

我的文字是

my_text = '"posted_data":"2e54eba66f8f2881c8e78be8342428xd","isropa":false,"rx":"NO","readal":"false"'

我正在尝试提取posted_data的值2e54eba66f8f2881c8e78be8342428xd

我的代码:

extract_posted_data = re.search(r'(\"posted_data\": \")(\w*)', my_text)
print (extract_posted_data)

并打印无

谢谢

4 个答案:

答案 0 :(得分:3)

这个特殊的例子似乎根本不需要正则表达式。

>>> my_text
'"posted_data":"2e54eba66f8f2881c8e78be8342428xd","isropa":false,"rx":"NO","readal":"false"'
>>> import json
>>> result = json.loads('{%s}' % my_text)
>>> result
{'posted_data': '2e54eba66f8f2881c8e78be8342428xd', 'isropa': False, 'rx': 'NO', 'readal': 'false'}
>>> result['posted_data']
'2e54eba66f8f2881c8e78be8342428xd'

使用BeautifulSoup

>>> import json
... 
... from bs4 import BeautifulSoup
... 
... soup = BeautifulSoup('<script type="text/javascript"> "posted_data":"2738273283723hjasda" </script>')
... 
... result = json.loads('{%s}' % soup.script.text)
>>> result
{'posted_data': '2738273283723hjasda'}
>>> result['posted_data']
'2738273283723hjasda'

答案 1 :(得分:1)

您需要更改正则表达式以使用外观,如下所示:

EVALUATE
CALCULATETABLE (
    Campaigne,
    CALCULATETABLE ( 
        DISTINCT ( Campaigne[Client] ), 
        Campaigne[Campagne] = "A" )
)

打印my_text = '"posted_data":"2e54eba66f8f2881c8e78be8342428xd","isropa":false,"rx":"NO","readal":"false"' extract_posted_data = re.search(r'(?<="posted_data":")\w*(?=")', my_text) print (extract_posted_data[0])

同样2e54eba66f8f2881c8e78be8342428xd返回一个Match对象,所以为了得到第一个匹配(唯一的匹配),你得到匹配的索引0:

答案 2 :(得分:1)

这是因为您的原始代码有一个额外的空间。它应该是:

extract_posted_data = re.search(r'(\"posted_data\":\")(\w*)', my_text)

事实上,'\'在这里是不必要的。只是:

extract_posted_data = re.search(r'("posted_data":")(\w*)', my_text)

然后:

extract_posted_data.group(2)

是你想要的。

>>> my_text = '"posted_data":"2e54eba66f8f2881c8e78be8342428xd","isropa":false,"rx":"NO","readal":"false"'
>>> extract_posted_data = re.search(r'("posted_data":")(\w*)', my_text)   
>>> extract_posted_data.group(2)
'2e54eba66f8f2881c8e78be8342428xd'

答案 3 :(得分:1)

正如其他人提到的那样,json对于这些数据来说是一个更好的工具,但你也可以使用这个正则表达式(我添加了一个\ s *,以防将来中间有空格):

正则表达式:"posted_data":\s*"(?P<posted_data>[^"]+)"

import re

my_text = '"posted_data":"2e54eba66f8f2881c8e78be8342428xd","isropa":false,"rx":"NO","readal":"false"'
m = re.search(r'"posted_data":\s*"(?P<posted_data>[^"]+)"', my_text)
if m:
    print(m.group('posted_data'))