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

2024-06-28 19:25:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着检查一个字符串是否等于另一个字符串,除了括号内的不同数字变化。有人能帮我吗?你知道吗

#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

Tags: 字符串namefromnumberstringexampleany数字
2条回答

必须创建正则表达式。你知道吗

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

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

import re

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

这将匹配完全等于name: [number]的字符串,其中number由一个或多个数字组成。你知道吗

如果您的对象名始终遵循该模式,并且您可以假设括号后面总是有一个数字,那么您可以不那么严格,只测试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

相关问题 更多 >