0

我目前正在尝试为其中的某些特定文本解析 python 字符串。它实际上应该非常简单。

但更重要的是,我想知道正则表达式是否是“工具集”类型的东西,你知道一些技巧吗?有些人对他们非常非常精通,我想达到那种精通。

因此,当我询问如何匹配此字符串时,我想解释一下您在找到解决方案时所经历的思考过程

我基本上想要只用逗号分隔的文本 A、文本 B 和文本 C。

所需的输出字符串:

"text A,text-B,text_C"

原文如下:

"(1, u'text A', u'text-B', u'text_C')"

在我有限的理解中,我知道分隔每个表达式的主要内容是单引号,所以我会从那个开始。但最终我可能会有这样的字符串,text-'A并且我想确保我不会因为我错误地解析字符串而遇到错误。

谢谢你的时间。记住:思维过程。

4

2 回答 2

3

由于您正在处理的字符串是 Python 元组的 repr 版本,因此最 Pythonic 的方法是使用ast.literal_eval可以获取该对象并安全地转换回保留正确类型的 Python 对象:

import ast
text = "(1, u'text A', u'text-B', u'text_C')"
tup = ast.literal_eval(text)

然后,如果您只想将作为字符串的每个项目连接在一起:

joined = ', '.join(el for el in tup if isinstance(el, basestring))
# text A, text-B, text_C

否则,只需切片元组tup[1:]并加入其中的项目......

就正则表达式而言,一种快速、肮脏、非鲁棒的方法,在某些情况下很容易中断,甚至可能提供不正确的匹配,它是使用:

import re
string_vals = re.findall("'(.*?)'", text)

这会在一个 up 之后找到任何东西',直到下一个'...再次,ast.literal_eval在这里使用要好得多...

于 2013-08-02T23:32:29.427 回答
0

必须是正则表达式吗?:(

a_str = "(1, u'text A', u'text-B', u'text_C')"
print ",".join(a_str[1:-1].split(",")[1:]).replace('u','').replace("'",'')

产量:

text A, text-B, text_C

编辑:好吧,如果它必须是正则表达式..不要介意这篇文章,它在很多情况下都不起作用。

于 2013-08-02T22:51:12.147 回答