一个包含数千个字符的字符串,我怎么只打印被"""
包围的characetrs?例如,如果包含这些字符的字符串,
438429834njnbjjj"28.30"98nj76789889jkljlkjllmm82
我将如何打印
28.30
我知道正则表达式,但不知道它是否可以像这样使用。对不起,我是Python的新手。
答案 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']