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

标签 python regex

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

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/

相关文章:

java - 正则表达式:不以 "hede"结尾

java - Java中从字符串中提取包含符号的单词

angularjs - 正则表达式验证错误

Python - 直接从硬盘读取

python - 尽管已安装,但无法加载 torchvision

java - 我需要一个正则表达式命令来隔离所有不与插入符号 (^) 相邻的数字

ruby-on-rails - 删除特定标签内的内容

python - 忘记 self 限定符 : how to catch this mistake?

python - 激活的VENV还在用系统pip和系统python?怎么了?

python - 值错误 : sampler option is mutually exclusive with shuffle pytorch