我想检查一个字符串是否以不同数字的十进制结尾,从搜索一阵子后,我发现最接近的解决方案是将值输入到元组中,并将其用作endswith()的条件。但是,除了输入所有可能的组合之外,还有没有更短的方法?

我尝试对结束条件进行硬编码,但是如果列表中没有新元素,则对这些条件不起作用,我还尝试使用regex将其他元素与十进制元素一起返回。任何帮助,将不胜感激

list1 = ["abcd 1.01", "zyx 22.98", "efgh 3.0", "qwe -70"]

for e in list1:
    if e.endswith('.0') or e.endswith('.98'):
        print 'pass'


编辑:对不起,应该指定我不想让'qwe -70'被接受,只有那些带有小数点的元素才能被接受

最佳答案

我想提出另一个解决方案:使用regular expressions搜索结尾的小数。

您可以使用以下正则表达式[-+]?[0-9]*\.[0-9]+$为结束的十进制定义正则表达式。

正则表达式分解为:


[-+]?:可选-开头的-或+符号
[0-9]*:零个或多个数字
\.:必填点
[0-9]+:一位或多位数字
$:必须在该行的末尾


然后,我们可以测试正则表达式以查看其是否与列表中的任何成员匹配:

import re

regex = re.compile('[-+]?[0-9]*\.[0-9]+$')
list1 = ["abcd 1.01", "zyx 22.98", "efgh 3.0", "qwe -70", "test"]

for e in list1:
  if regex.search(e) is not None:
    print e + " passes"
  else:
    print e  + " does not pass"


前一个脚本的输出如下:

abcd 1.01 passes
zyx 22.98 passes
efgh 3.0 passes
qwe -70 does not pass
test does not pass

关于python - 检查Python 2中字符串是否以小数结尾,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39672916/

10-12 18:39