如何编写python表达式以过滤掉某些字符串

如何编写python表达式以过滤掉某些字符串,python,regex,Python,Regex,有一个由多个数字组成的字符串,例如: 12.03 5.897 7.10.74 0.103 12.05 6.4.1 8.98 我想使用Python正则表达式只输出那些只有单点(.)的数字,比如“12.03”和“5.897”,而不是“7.10.74”和“6.4.1” 我知道这是一个没有正则表达式的小问题,我只想用正则表达式解决这个问题。但我真的不知道如何用正则表达式解决这个问题。有人能帮我吗?正则表达式解决方案: 首先使用以下命令将字符串拆分为列表: 然后使用relib来使用regex s = "

有一个由多个数字组成的字符串,例如:

12.03 5.897 7.10.74 0.103 12.05 6.4.1 8.98
我想使用Python正则表达式只输出那些只有
单点(.)的数字
,比如
“12.03”
“5.897”
,而不是
“7.10.74”
“6.4.1”


我知道这是一个没有正则表达式的小问题,我只想用正则表达式解决这个问题。但我真的不知道如何用正则表达式解决这个问题。有人能帮我吗?

正则表达式解决方案:

首先使用以下命令将字符串拆分为列表:

然后使用
re
lib来使用regex

s = "12.03 5.897 7.10.74 0.103 12.05 6.4.1 8.98";
sList= s.split();
#d+ strats with one or more digits follwd by a .(dot) ends with one or more digits;
r = re.compile('^\d+\.\d+$');
filter(r.match, sList);
如果您想要纯正则表达式解决方案,请尝试以下方法:(注意未测试)


根据
@erip
注释编辑您可以将
[-+]?
添加到您的正则表达式
[-+]?(\d+\.\d+\s |$
,如果您的字符串中有符号值。

如果您想要纯正则表达式解决方案,请使用lookarounds:

>>> s = "12.03 5.897 7.10.74 0.103 12.05 6.4.1 8.98"
>>> print re.findall(r'(?<!\.)\b\d+\.\d+\b(?!\.)', s)
['12.03', '5.897', '0.103', '12.05', '8.98']
>>s=“12.03 5.897 7.10.74 0.103 12.05 6.4.1 8.98”

>>>打印re.findall(r’(?使用
)(?你需要正则表达式吗?没有正则表达式就很简单了。不,我不需要。但我只想用正则表达式解决它。这似乎是一个愚蠢的要求。编写正则表达式比简单的要花费(而且表面上花费了)更长的时间(而且效率更高!)解决方案。您完全正确。但我只想练习我的正则表达式。可能需要添加
[-+]?
在出现负数或误报正数的情况下发送到您的正则表达式中。+1谢谢。不首先拆分字符串就可以解决此问题吗?这正是我想要的。非常感谢!!哈。如果我看到有人用我正在编写的代码编写此代码,他们会发现自己收到一封讨厌的电子邮件!;)+1解释。这很有趣。今天学习了一些关于正则表达式的知识。:)
>>> s = "12.03 5.897 7.10.74 0.103 12.05 6.4.1 8.98"
>>> print re.findall(r'(?<!\.)\b\d+\.\d+\b(?!\.)', s)
['12.03', '5.897', '0.103', '12.05', '8.98']
import re
re.findall(r'(?<=\s)\d*\.\d*(?=\s|$)|^\d*\.\d*(?=\s|$)', s)

# ['12.03', '5.897', '0.103', '12.05', '8.98']
string = "12.03 5.897 7.10.74 0.103 12.05 6.4.1 8.98"
r = re.compile('^\d+\.\d+$')
res = filter(r.match, string.split(' '))
print res