Python:处理字符串时出现问题

2024-09-24 19:38:22 发布

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

我有一个字符串如下:

names = "name:fred, name:wilma, name:barney, name2:gauss, name2:riemann"

假设字符串名称具有name和name2属性。你知道吗

如何编写一个函数is\u name\u attribute(),用于检查值是否为name属性?也就是说,is name\u attribute('fred')应该返回True,而is name\u attribute('gauss')应该返回False。你知道吗

另外,如何创建一个逗号分隔的字符串,它只包含name属性,即

"fred, wilma, barney" 

Tags: 函数字符串name名称true属性namesis
3条回答

简单regexp匹配:

>>> names = re.compile ('name:([^,]+)', 'g')
>>> names2 = re.compile ('name2:([^,]+)', 'g')
>>> str = "name:fred, name:wilma, name:barney, name2:gauss, name2:riemann"
>>> 'fred' in names.findall(str)
True
>>> names.findall(str)
['fred', 'wilma', 'barney']

有其他方法可以做到这一点(你将从答案中看到),但也许是时候学习一些Python列表的魔力了。你知道吗

>>> names = "name:fred, name:wilma, name:barney, name2:gauss, name2:riemann"
>>> names_list = [pair.split(':') for pair in names.split(', ')]
>>> names_list
[['name', 'fred'], ['name', 'wilma'], ['name', 'barney'], ['name2', 'gauss'], ['name2', 'riemann']]

从那里,这只是一个检查的案例。如果你在找某个名字:

for pair in names_list:
    if pair[0] == 'name' and pair[1] == 'fred':
        return true
return false

只加入名字版本:

>>> new_name_list = ','.join([pair[1] for pair in names_list if pair[0] == 'name'])
>>> new_name_list
'fred,wilma,barney'

像这样:

>>> names = "name:fred, name:wilma, name:barney, name2:gauss, name2:riemann"
>>> pairs = [x.split(':') for x in names.split(", ")]
>>> attrs = [x[1] for x in pairs if x[0]=='name']
>>> attrs 
['fred', 'wilma', 'barney']
>>> def is_name_attribute(x):
...     return x in attrs
...
>>> is_name_attribute('fred')
True
>>> is_name_attribute('gauss')
False

相关问题 更多 >