我有以下字符串,其中包含一些文本/数字。总是有一个 ()
,中间有两个数字。需要提取这两个数字。
字符串看起来像这样:
s = 'sadfdaf dsf4as d a4d34s ddfd (54.4433,-112.3554) a45 6sd 6f8 asdf'
我需要一个正则表达式来解决这个问题。 像这样的伪代码
在
s
中搜索(
并检查数字是否是下一个字符提取数字直到
,
- 提取第二个数字直到
)
我从 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"
因此使用构造函数的“附加”值是也允许使用下划线(分隔数字的组),此外还可以使用 infinity
、inf
和 nan
也是允许的。
关于python - 如何使用正则表达式在括号之间查找一对数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43278967/