检查Python 2中字符串是否以小数结尾

时间:2016-09-24 05:34:59

标签: python list ends-with

我想检查字符串是否以不同数字的小数结尾,从搜索一段时间开始,我找到的最接近的解决方案是将值输入到元组中并将其用作endswith()的条件。但是有没有更短的方式而不是输入所有可能的组合?

我尝试对结束条件进行硬编码,但是如果列表中有新元素它不适用于那些,我也尝试使用正则表达式,它也会返回其他元素和十进制元素。任何帮助将不胜感激

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'要被接受,只接受那些带小数点的元素

6 个答案:

答案 0 :(得分:2)

我想提出另一个解决方案:使用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

答案 1 :(得分:0)

您的示例数据留下了许多可能性:

最后一个字符是数字:

e[-1].isdigit()

最后一个空格后的所有内容都是数字:

try:
    float(e.rsplit(None, 1)[-1])
except ValueError:
    # no number
    pass
else:
    print "number"

使用正则表达式:

re.match('[.0-9]$', e)

答案 2 :(得分:0)

suspects = [x.split() for x in list1] # split by the space in between and get the second item as in your strings

# iterate over to try and cast it to float -- if not it will raise ValueError exception

for x in suspects:
    try:
        float(x[1])
        print "{} - ends with float".format(str(" ".join(x)))
    except ValueError:
        print "{} - does not ends with float".format(str(" ".join(x)))

## -- End pasted text --

abcd 1.01 - ends with float
zyx 22.98 - ends with float
efgh 3.0 - ends with float
qwe -70 - ends with float

答案 3 :(得分:0)

我认为这适用于这种情况:

regex = r"([0-9]+\.[0-9]+)"

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

for e in list1:
    str = e.split(' ')[1]
    if re.search(regex, str):
       print True #Code for yes condition
    else:
       print False #Code for no condition

答案 4 :(得分:0)

正如您所猜测的那样,endswith()不是一个很好的方式来看待解决方案,因为组合的数量基本上是无限的。要做的就是 - 正如许多建议的那样 - 一个正则表达式,它将字符串的结尾与小数点相匹配,后跟任意数字位数。除此之外,保持代码简单,可读。 strip()就在那里,以防一个输入字符串在末尾有一个额外的空格,这会不必要地使正则表达式复杂化。 您可以在以下位置查看此操作:https://eval.in/649155

import re
regex = r"[0-9]+\.[0-9]+$"

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

for e in list1:
    if re.search(regex, e.strip()):
       print e, 'pass'

答案 5 :(得分:0)

流动可能会有所帮助:

import re

reg = re.compile(r'^[a-z]+ \-?[0-9]+\.[0-9]+$')

if re.match(reg, the_string):
    do something...
else:
    do other...