gpt4 book ai didi

python - 正则表达式提取未知数字格式的负数

转载 作者:行者123 更新时间:2023-11-30 22:12:05 24 4
gpt4 key购买 nike

我能够从此字符串中获取数字:

string_p= '7 5 blah 6 小数 6.5 千 8,999 带美元符号 $9,000 和 $9,500,001.45 结束...最后...8.4% 现在结束

使用此代码:

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= '七 (5) blah (6) 小数 (6.5) 千 (8,999) 带有美元符号 $(9,000) 和 $(9,500,001.45) 最后结束...... (8.4)% 现在结束'

我尝试首先将 () 替换为负号,如下所示

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

最佳答案

您可以将正则表达式更改为:

import re

def extractVal2(s,n):
try:
pattern = r'\$?\(?[0-9][0-9,.]*\)?%?'
if n > 0:
return re.findall(pattern, s)[n-1].replace("(","-").replace(")","")
else:
return re.findall(pattern, s)[n].replace("(","-").replace(")","")
except IndexError as e:
return None

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)%'

for i in range(1,9):
print extractVal2(string_n,i)

它也会解析 9,500,001.45 - 并捕获 $ 之后和数字之前的前导 ( 并将其替换为 - 符号。不过,它是一个 hack - 它不会“看到”您的 ( 是否没有 ) 并且还会捕获“非法”数字,例如 2,200.200,22

输出:

-5
-6
-6.5
-8,999
$-9,000
$-9,500,001.45
-8.4%
None

如果您的 re.findall(..) 没有捕获任何内容(或太少),并且您正在建立索引,您也许还应该考虑捕获 IndexError返回列表后面。

<小时/>

正则表达式允许:

leading literal $       (not interpreded as ^...$ end of string)
optional literal (
[0-9] one digit
[0-9,.%]* any number (maybe 0 times) of the included characters in any order
to the extend that it would mach smth like 000,9.34,2
optional literal )
optional literal %

关于python - 正则表达式提取未知数字格式的负数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51232799/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com