我有以下字符串,其中包含一些文本/数字。总是有一个()
,中间有两个数字。需要提取这两个数字。
字符串如下所示:
s = 'sadfdaf dsf4as d a4d34s ddfd (54.4433,-112.3554) a45 6sd 6f8 asdf'
我需要一个正则表达式来解决这个问题。 像这样的伪代码
在s
搜索(
并检查号码是否为下一个字符
提取数字直到,
)
print re.findall("[-+]?\d+[\.]?\d*[eE]?[-+]?\d*", schoolAddressString)
返回:['4', '4', '34', '54.4433', '-112.3554', '45', '6', '6', '8']
所以我需要让这个表达式只考虑()
与^(
和$(
之间的数字。
这是怎么做到的?
答案 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;使用构造函数的值是允许下划线(分隔组的数字),此外,infinity
,inf
和nan
之类的值也是允许的。
答案 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']
但你必须确保分隔符总是(,)