Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 健壮的正则表达式匹配所有字符,直到一个浮点数_Python_Regex_Python 3.x_Python 2.7 - Fatal编程技术网

Python 健壮的正则表达式匹配所有字符,直到一个浮点数

Python 健壮的正则表达式匹配所有字符,直到一个浮点数,python,regex,python-3.x,python-2.7,Python,Regex,Python 3.x,Python 2.7,我需要一个健壮的正则表达式,它将匹配所有字符直到一个浮点 我有一个字符串的dict,字符串看起来像下面的模拟示例: 'some string 1 some more 2.1 even more 9.2 caracala,domitian2.3' ... 我需要一个健壮的正则表达式,以便仅在浮点上对每个字符串进行子串,因此最终结果如下所示: { 'some string 1 some more': '2.1' 'even more': '9.2' 'caracala,domi

我需要一个健壮的正则表达式,它将匹配所有字符直到一个浮点

我有一个字符串的dict,字符串看起来像下面的模拟示例:

    'some string 1 some more 2.1 even more 9.2 caracala,domitian2.3'
...
我需要一个健壮的正则表达式,以便仅在浮点上对每个字符串进行子串,因此最终结果如下所示:

{
  'some string 1 some more': '2.1'
  'even more': '9.2'
  'caracala,domitian': '2.3'
}
我将在python re中使用for循环来获得最终结果,但是我需要一个健壮的正则表达式,它将匹配所有字符直到一个浮点。


我尝试过:
[-+]?\d*\。\d+\d+
但它也使用
re选择数字。findall
可能会得到您想要的结果:

inp = "some string 1 some more 2.1 even more 9.2 caracala,domitian2.3"
matches = re.findall(r'(.*?)\s*(\d+\.\d+)\s*', inp)
print(matches)

[('some string 1 some more', '2.1'), ('even more', '9.2'), ('caracala,domitian', '2.3')]
正则表达式的解释:

(.*?)       match all content up the first
\s*         optional space, which is followed by
(\d+\.\d+)  a floating point number

请注意,我们捕获了主要内容,并在单独的捕获组中浮动,然后这些捕获组分别出现在结果列表中。

使用
re.findall
可能会得到您想要的结果:

inp = "some string 1 some more 2.1 even more 9.2 caracala,domitian2.3"
matches = re.findall(r'(.*?)\s*(\d+\.\d+)\s*', inp)
print(matches)

[('some string 1 some more', '2.1'), ('even more', '9.2'), ('caracala,domitian', '2.3')]
正则表达式的解释:

(.*?)       match all content up the first
\s*         optional space, which is followed by
(\d+\.\d+)  a floating point number

请注意,我们捕获了领先的内容,并将其分为不同的捕获组,然后分别显示在结果列表中。

我不是被否决的人,但到目前为止您尝试了什么?有一个很好的网站,可能重复我不是被否决的人,但是到目前为止你都做了些什么呢?有一个很好的网站,很可能是重复的