我能从这个字符串中得到数字:
string_p= 'seven 5 blah 6 decimal 6.5 thousands 8,999 with dollar signs $9,000 and $9,500,001.45 end ... lastly.... 8.4% now end
使用此代码:
import re
def extractVal2(s,n):
if n > 0:
return re.findall(r'[0-9$,.%]+\d*', s)[n-1]
else:
return re.findall(r'[0-9$,.%]+\d*', s)[n]
for i in range(1,7):
print extractVal2(string_n,i)
但我不能用它来做负数。负数是括号里的数字。你知道吗
string_n= 'seven (5) blah (6) decimal (6.5) thousands (8,999) with dollar signs $(9,000) and $(9,500,001.45) end lastly.... (8.4)% now end'
我试着先用这样的负号来代替()
string_n= re.sub(r"\((\d*,?\d*)\)", r"-\1", string_n)
然后这些得到负数
r'[0-9$,.%-]+\d*', s)[n]
r'[0-9$,.%]+-\d*', s)[n]
r'[-0-9$,.%]+-\d*', s)[n]
甚至使用不同的方法:
words = string_n.split(" ")
for i in words:
try:
print -int(i.translate(None,"(),"))
except:
pass
您可以将正则表达式更改为:
它还将解析
9,500,001.45
,并在$
之后和数字之前捕获一个前导(
,并用-
符号替换它。不过这是一个黑客-它不会“看到”你的(
是否没有)
,也会捕获像2,200.200,22
这样的“非法”数字。你知道吗输出:
如果您的
re.findall(..)
没有捕获任何内容(或捕获的内容太少),并且您在返回的列表后面建立索引,那么您也应该考虑捕获IndexError
。你知道吗正则表达式允许:
相关问题 更多 >
编程相关推荐