我将以下文本存储在一个变量中,该变量在其前后都有其他文本:
'content="80.96"abcd'
我有一个搜索变量,我可以从中找到以下位置:content ="
然后我需要另一次搜索来找到第二个引号的位置,使用我从上一次搜索中找到的结束位置作为第二次搜索的起点。是否可以使用re.search从字符串中的某个起始位置进行这种搜索?
你看,我的目标是得到80.96,一些股票的价格。但是,对于另一只股票,它可能是更少或更多的数字。我的最终目标是寻找第二个位置。这样我就可以计算股票价格的长度并提取它。
使用Python 3.4.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)
这样,程序就会打印股票。