Python字符串搜索 - 从字符串中的特定位置开始

时间:2015-09-07 03:19:17

标签: python-3.x search

我将以下文本存储在一个变量中,该变量在其前后都有其他文本:

'content="80.96"abcd'

我有一个搜索变量,我可以从中找到以下位置:content ="

然后我需要另一次搜索来找到第二个引号的位置,使用我从上一次搜索中找到的结束位置作为第二次搜索的起点。是否可以使用re.search从字符串中的某个起始位置进行这种搜索?

你看,我的目标是得到80.96,一些股票的价格。但是,对于另一只股票,它可能是更少或更多的数字。我的最终目标是寻找第二个位置。这样我就可以计算股票价格的长度并提取它。

使用Python 3.4.3

谢谢

3 个答案:

答案 0 :(得分:0)

如果我理解你的问题是正确的。你只想从字符串中获取小数。假设所有字符串的格式相同,即content="<decimal>"cccc

您可以拆分字符串然后使用正则表达式来执行此操作:

In [1]: a = 'content="80.96"abcd'

In [2]: a.split('=')
Out[2]: ['content', '"80.96"abcd']

In [3]: b = a.split('=')[1]

In [4]: b
Out[4]: '"80.96"abcd'

In [5]: import re

In [6]: p = re.compile(ur'\"(\d*\.?\d*)\"')

In [7]: re.search(p, b)
Out[7]: <_sre.SRE_Match at 0x3ad2af8>

In [8]: obj = re.search(p, b)

In [9]: obj.group()
Out[9]: '"80.96"'

In [10]: s = obj.group()

In [11]: s
Out[11]: '"80.96"'

In [12]: s[1 : -1]
Out[12]: '80.96'

作为一个程序,它将是:

import re

def getDecimal(string):
    part_2 = string.split('=')[1]
    pattern = re.compile(ur'\"(\d*\.?\d*)\"')
    obj = re.search(pattern, part_2)
    return obj.group()[1 : -1]

print(getDecimal('content="83520.96652"asdf')) # Output: 83520.96652

答案 1 :(得分:0)

你的方式/问题

  

我的最终目标是寻找第二个&#34;以便   我可以计算股票价格的长度并提取它。

>>> import re
>>> text = 'content="80.96"abcd'
>>> [m.start() for m in re.finditer('"', text)] # gets double quotes indices
[8, 14]
>>> text[8:14+1]
'"80.96"'

更好的方法可能只是获取小数股票报价

>>> m = re.search("\d+.\d+", text)
>>> m.group()
'80.96'

然后我建议您将报价单存储为Decimal数据类型,float是近似值,当涉及到金融交易时,您将获得&#34;舍入&#34;某些操作出错

>>> from decimal import Decimal
>>> Decimal(m.group())
Decimal('80.96')

答案 2 :(得分:0)

您可以使用for循环浏览所有字符。

text='content="80.96"abcd'
record='no'
stock=[]
for letter in text:
    if letter=='"' and record=='no':
        record='yes':
    elif letter=='"' and record=='yes':
        record='no':
    elif record=='yes':
        stock.append(letter)
stock=''.join(stock)
print(stock)

这样,程序就会打印股票。