如何使用正则表达式在括号中找到一对数字?

时间:2017-04-07 13:05:55

标签: python regex

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

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

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

  1. s搜索(并检查号码是否为下一个字符

  2. 提取数字直到,

  3. 提取第二个号码,直到)
  4. 我从stackoverflow

    找到了以下解决方案
    print re.findall("[-+]?\d+[\.]?\d*[eE]?[-+]?\d*", schoolAddressString) 
    

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

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

    这是怎么做到的?

3 个答案:

答案 0 :(得分:6)

您可以简单地使用正则表达式捕获括号中的元素,然后使用$(function() { $('#div1').click(function() { $('#content2, #content3').hide(); /* other code ..*/ }); $('#div2').click(function() { $('#content1, #content3').hide(); /* other code ..*/ }); /* other code */ }); .split(',')解析它们以将它们解析为彩车。像:

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] 。因此,我认为解析将 less 容易出错:将会有更多可以解析的模式,并且解析可能正确完成。

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

浮动模式

values

中描述了float(..)构造函数可以解析的模式
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"

所以&#34;添加&#34;使用构造函数的值是允许下划线(分隔的数字),此外,infinityinfnan之类的值也是允许的。

答案 1 :(得分:4)

这样的东西?

for segment in re.findall("[(][^)]*[)]", s):
    print re.findall("[-+]?\d+[\.]?\d*[eE]?[-+]?\d*", segment) 

请注意,无论每个细分中有多少个数字,或者它们是如何分开的,这都会有效,这比您需要的更灵活。

答案 2 :(得分:2)

如果你的变量s是一个字符串,你可以使用split方法(docs python) 你可以制作这样的代码:

s = 'sadfdaf dsf4as d a4d34s ddfd (54.4433,-112.3554) a45 6sd 6f8 asdf'
s_without_beginning = s.split('(')[1]
s_without_extremeties = s_without_beginning.split(')')[0]
numbers = s_without_extremeties.split(',')

这将返回:

numbers =

['54.4433', '-112.3554']

但你必须确保分隔符总是(,)