gpt4 book ai didi

python - 如何使用正则表达式在括号之间查找一对数字?

转载 作者:行者123 更新时间:2023-11-28 19:42:48 25 4
gpt4 key购买 nike

我有以下字符串,其中包含一些文本/数字。总是有一个 (),中间有两个数字。需要提取这两个数字。字符串看起来像这样:

s = 'sadfdaf dsf4as d a4d34s ddfd (54.4433,-112.3554) a45 6sd 6f8 asdf'

我需要一个正则表达式来解决这个问题。像这样的伪代码

  1. s 中搜索 ( 并检查数字是否是下一个字符

  2. 提取数字直到 ,

  3. 提取第二个数字直到 )

我从 stackoverflow 中找到了以下解决方案

print re.findall("[-+]?\d+[\.]?\d*[eE]?[-+]?\d*", schoolAddressString) 

返回:['4', '4', '34', '54.4433', '-112.3554', '45', '6', '6', '8']

所以我需要这个表达式来只考虑 ()^($( 之间的数字。

这到底是怎么做到的?

最佳答案

您可以简单地使用 正则表达式捕获括号之间的元素,然后使用 .split(',') 解析这些元素并float 将它们解析为 float 。喜欢:

for match in re.findall(r'(?<=\().*?(?=\))',schoolAddressString):
a,b = map(float,match.split(','))
# do something with a and b, for example
print([a,b])

这打印:

>>> for match in re.findall(r'(?<=\().*?(?=\))',schoolAddressString):
... a,b = map(float,match.split(','))
... # do something with a and b, for example
... print([a,b])
...
[54.4433, -112.3554]

此外,您还在这里解析了一个float。因此,我认为解析将较少容易出错:可以解析的模式会更多,并且解析可能会正确完成。

map(..) 的结果是一个列表。因此,如果括号之间可以有任意个值,您可以使用values = map(..),然后处理values<中的元素.

float 模式

float(..) 构造函数可以解析的模式在the documentation 中有描述。 :

sign           ::=  "+" | "-"
infinity ::= "Infinity" | "inf"
nan ::= "nan"
numeric_value ::= floatnumber | infinity | nan
numeric_string ::= [sign] numeric_value

floatnumber ::= pointfloat | exponentfloat
pointfloat ::= [digitpart] fraction | digitpart "."
exponentfloat ::= (digitpart | pointfloat) exponent
digitpart ::= digit (["_"] digit)*
fraction ::= "." digitpart
exponent ::= ("e" | "E") ["+" | "-"] digitpart

digit ::= "0"..."9"

因此使用构造函数的“附加”值是也允许使用下划线(分隔数字的),此外还可以使用 infinityinfnan 也是允许的。

关于python - 如何使用正则表达式在括号之间查找一对数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43278967/

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