2015-10-13 62 views
-2

我有一个Python字符串,它看起来像这样:

[u'$649.99'] 

我想用正则表达式来拉出$649.99

正则表达式应该看最远的']以确保文本不会意外地被切断。我想期待$649.99

+0

这真的是你的字符串看起来像(包括括号和内部撇号),还是包含一个unicode字符串的列表? – DSM

+0

@DSM不幸的是,这直接是字符串。它的一个字符串表示一个列表包含一个unicode字符串.... – user299709

+2

这必须是一个家庭作业问题。非常类似于http://stackoverflow.com/questions/33112431/python-unable-to-convert-unicode-to-string – RobertB

回答

4

你不需要一个正则表达式。

>>> import ast 
>>> s = "[u'$649.99']" 
>>> ast.literal_eval(s) 
['$649.99'] 
>>> ast.literal_eval(s)[0] 
'$649.99' 
0

你的正则表达式看起来像

\$\d*\.\d\d$ 

将于$其次是0个或多个数字,一个小数点\.逃脱,使其文字,后面两个数字,字符串的结尾。这里是一个demo

+0

这并不包含我相信要求的“$”。 – RobertB

+0

$最后实际上是不正确的。 – RobertB

0

我想你想要的是:

/'(.*)'/ 

这是引号之间的一切。

0

简单的解决办法是

regex = re.compile(r"\[u'(.*)'\]") 
result = regex.match("[u'$649.99']").group(0) 

请注意,如果得到了错位成字符串表示Unicode字符串不包含特殊字符,'\这仅适用。

如果可能出现这种情况,像ast.literal_eval()这样的Python文字解析器将是获取字符串表示内容的更好方法。

0

建议你不需要Regex。您可以使用str() functino将Unicode字符串转换成你的名单分成一个正常的字符串:

a = "[u'$649.99']" 
str(eval(a)[0]) 

但如果你想正则表达式这将做到这

r'\$\d{1,3}\.\d{1,2}' 
0

有了这个解决方案,您不需要导入任何东西:

>>> s = "[u'$649.99']" 
>>> s.split("'")[1] 
'$649.99' 
相关问题