2017-07-26 44 views
3

我想编写Python正则表达式是需要模式的字符串:Python的正则表达式:为什么不接受我的模式?

“u'Johns的地方”,”

和回报:

约翰的地方

它应该找到字符'u',撇号在它之后,然后是在c之前的撇号omma并返回这两个撇号之间的内容。

因此,我写了下面的代码:

title = "u'Johns's Place'," 
print re.sub(r"u'([^\"']*)',", r"\"\1\"", title) 

不过,我还是得到了整个字符串

“u'Johns的地方”,”

没有过滤。

你知道它是如何解决的吗?

+4

我怀疑有关你的字符串中有“u”,你是如何得到这个字符串的? – idjaw

+0

其实这'你'应该提到'unicode' – CrazySynthax

+4

是的,这正是我为什么对此感到怀疑。我想你应该解释*你是如何得到那个字符串的,因为这听起来像是一个XY问题。 – idjaw

回答

7

Python不接受你的模式,因为中间'"John's"。如您的模式中所述,它后面没有逗号。匹配不能继续寻找',,因为您只允许不是"'[^\"']*的字符。

如果您想用Python解析JSON,请使用json包,而不是将regexen应用于转义的unicode字符串。

+0

好的。但是在Place之后有一个逗号。所以我希望python忽略John's中的逗号并在“Place”后面加逗号“ – CrazySynthax

+1

@CrazySynthax:匹配无法继续,您禁止使用'[^ ​​\''] *'。 –

2

我不使用Python很多,但这个表达式应该解决您的问题

^u'(.*)',$ 

从一开始就u和单引号匹配,捕捉后任何事情,直到单引号和逗号末

print re.sub(r"^u'(.*)',$", r"\"\1\"", title) 

删除^和$如果还有更多您的字符串比更换(换句话说,如果有任何上下文)

0

作出更大的研究后,我发现了个是包https://simplejson.readthedocs.io/en/latest/

它可以让你阅读一个JSON文件,而不用为每个字符串放置'..'。

import simplejson as json 
import requests 

response_json = requests.get(<url-address>) 
current_json = json.loads(response_json.content) 

current_json在每个字符串的beginnig都没有字符'u'。

它回答我的问题,部分是因为它返回由一个单引号(')分隔,而不是用引号(“),因为它需要的JSON格式键和值。

相关问题