如何根据周围的字符打印字符

时间:2014-12-19 19:36:15

标签: python

一个包含数千个字符的字符串,我怎么只打印被"""

包围的characetrs?

例如,如果包含这些字符的字符串,

438429834njnbjjj"28.30"98nj76789889jkljlkjllmm82

我将如何打印

28.30

我知道正则表达式,但不知道它是否可以像这样使用。对不起,我是Python的新手。

4 个答案:

答案 0 :(得分:3)

是的,您可以使用正则表达式:

import re

my_string = '438429834njnbjjj"28.30"98nj76789889jkljlkjllmm82'

matches = re.findall(r'".*?"', my_string)

工作原理:

它调用re.findall方法,该方法接受正则表达式和字符串,并返回该表达式的所有匹配项。

表达式本身非常简单,并在下面解释:

"    # matches a quote
.    # matches any character
*    # matches previous rule zero or more times
?    # tells the previous rule to match as little as possible
"    # matches a quote again

然后,您可能会问“为什么我们需要??”: 没有它,包含多个可能匹配的字符串将仅返回一个匹配。示例:my_string = 'hi "important" asdf "also important" not important'将匹配整个字符串中的第一个和最后一个引号,从而匹配所有"important"asdf"also important"

获得此匹配列表后,您可以使用列表推导来删除数据周围的引号,如果需要,甚至可以将其转换为数字:

# removes first and last character of every match
unquoted = [string[1:-1] for string in matches]

# removes first and last characters and converts match to number
numbers = [float(string[1:-1]) for string in matches]

答案 1 :(得分:2)

我不确定你是否说'#34;我知道正则表达式,但不想使用它"或者你说'#34;我& #39; d喜欢使用正则表达式,但不知道怎么做"。所以这里是一个正则表达式的例子

>>> import re
>>> s='438429834njnbjjj"2830"98nj76789889jkljlkjllmm82'
>>> re.findall(r'(?i)"([\da-z]+")',s)
['2830"']

此示例仅匹配原始帖子请求的数字和字母。

答案 2 :(得分:1)

不使用正则表达式:

>>>s='438429834njnbjjj"28.30"98nj76789889jkljlkjllmm82'
>>>extracted_str = s.split('"')[1]
>>>print extracted_str
28.30

如果可以有多对" ... ",那么你可以做

>>>s='438429834njnbjjj"28.30"98nj76789889jkljlkjllmm82"extra junk"'
>>>extracted_str = s.split('"')

>>>for i in xrange(1,len(extracted_str),2):
>>>        if i is not len(extracted_str)-1:
>>>                print extracted_str[i]
28.30
extra junk

以上还说明了是否存在不匹配的"(if语句)

答案 3 :(得分:0)

您可以使用split()功能,但如果您的字符串中只有一个" " ,则可以正常工作:

>>> s='438429834njnbjjj"28.30"98nj76789889jkljlkjllmm82'
>>> s.split('"')[1]
'28.30'

如果您不确定字符串中"的数量,则需要使用正则表达式:

>>> s='438429834njnbjjj"28.30"98nj76789889jkljlkjllmm"82"asdf'
>>> re.findall(r'"(.*?)"',s)
['28.30', '82']