检查字符串但跳过括号内的数字?

时间:2014-03-14 08:33:38

标签: python

我试图检查一个字符串是否等于另一个字符串,除了sting内括号内的不同数字变量。任何人都可以帮助我吗?

#example name: "hername: [485]"

name = "myname"
random_name = #random string from a list
objectname = (str(random_name))+": [#any number]")

if objectname.startswith(str(name)):
    #do something

2 个答案:

答案 0 :(得分:1)

最严格的测试是使用正则表达式:

import re

if re.search(r'^{}: \[\d+\]$'.format(re.escape(name)), objectname):

这将匹配完全等于name: [number]的字符串,其中number由1位或更多位数组成。

如果您的对象名称始终遵循该模式,您可以不那么严谨并只测试name: [,并且您可以假设在括号后面总是有一个数字:

if objectname.startswith('{}: ['.format(name)):

或者更简单,假设你的所有名字总是以: [number]结尾,只测试冒号前的名字:

if objectname.partition(':')[0] == name:

演示:

>>> import re
>>> objectnames = 'hername: [485]', 'myname: [42]', 'myname: [81]'
>>> name = 'myname'
>>> for objectname in objectnames:
...     if re.search(r'^{}: \[\d+\]$'.format(re.escape(name)), objectname):
...         print objectname, 'matches'
... 
myname: [42] matches
myname: [81] matches
>>> for objectname in objectnames:
...     if objectname.startswith('{}: ['.format(name)):
...         print objectname, 'matches'
... 
myname: [42] matches
myname: [81] matches
>>> for objectname in objectnames:
...     if objectname.partition(':')[0] == name:
...         print objectname, 'matches'
... 
myname: [42] matches
myname: [81] matches

答案 1 :(得分:0)

你必须创建正则表达式。

import re

name = "myname"
random_name = #random string from a list
objectname = (str(random_name))+": [#any number]")
prog = re.compile(name+':.\[\d+\]')
if prog.match(objectname):
    #do something