如何使用起点和终点(字符)选择字符串?

时间:2014-08-30 15:37:24

标签: python string search find

如何在知道起点和终点的python中选择一个字符串?

如果字符串是:

Evelin said, "Hi Dude! How are you?" and no one cared!!

或类似的东西:

Jane said *aww! thats cute, we must try it!* John replied, "Okay!, but not now!!"

我想要写的是一个从" "中选择而不是通过计算索引的函数,
但是只选择从字符到字符的文本,

"Hi Dude! How are you?""Okay!, but not now!!"

所以我怎么能这样做?有内置功能吗?

我知道python中有一个内置函数可以获取给定字符的索引

即,

find("something")返回字符串中给定字符串的索引。

还是需要遍历字符串?

我刚开始使用python,对不起这样的小问题。 python 2或3就可以了!!非常感谢你!

更新

谢谢大家的答案,作为一个初学者,我只想坚持使用内置的split()函数quotes = string.split('"')[1::2],因为它很简单。谢谢你们。非常喜欢:))

4 个答案:

答案 0 :(得分:2)

txt='''\
Evelin said, "Hi Dude! How are you?" and no one cared!!
Jane said *aww! thats cute, we must try it!* John replied, "Okay!, but not now!!"'''

import re

print re.findall(r'"([^"]+)"', txt)
# ['Hi Dude! How are you?', 'Okay!, but not now!!']

答案 1 :(得分:1)

如果您不想使用str.index()

,则可以使用regular expressions
import re

quotes = re.findall('"([^"]*)"', string)

您可以轻松扩展它以从字符串中提取其他信息。

可替换地:

quotes = string.split('"')[1::2]

使用str.index()

first = string.index('"')
second = string.index('"', first+1)
quote = string[first+1:second]

答案 2 :(得分:1)

要按字符提取子字符串,拆分对这些字符要容易得多; str.partition()str.rpartition()在给定字符串的第一次或最后一次出现时有效地拆分字符串:

extracted = inputstring.partition('"')[-1].rpartition('"')[0]

从开始和结束分区的组合为您提供了可能的最大子字符串,在那里留下任何嵌入的引号。

演示:

>>> inputstring = 'Evelin said, "Hi Dude! How are you?" and no one cared!!'
>>> inputstring.partition('"')
('Evelin said, ', '"', 'Hi Dude! How are you?" and no one cared!!')
>>> inputstring.rpartition('"')
('Evelin said, "Hi Dude! How are you?', '"', ' and no one cared!!')
>>> inputstring.partition('"')[-1].rpartition('"')[0]
'Hi Dude! How are you?'

答案 3 :(得分:1)

str.index(str2)在str中查找str2的索引...最简单的方法!

a = 'Evelin said, "Hi Dude! How are you?" and no one cared!!'
print a[1+a.index("\""):1+a.index("\"")+a[a.index("\"")+1:].index("\"")]

或者如Scorpion_God所提到的,你可以简单地使用单引号,如下所示

print a[1+a.index('"'):1+a.index('"')+a[a.index('"')+1:].index('"')]

这将导致:

Hi Dude! How are you?

不会包含行情!!!