我想编辑下面的代码以捕获所有带有“_C [任何字母/任意数字/或任何内容]”的字符串
这是我的清单
name_list = ['chrome_PM',
'chrome_P',
'chromerocker_C',
'chromebike_P1',
'chromecar_CMale',
'chromeone_C1254',
'Lukate_Aids_Consumer_P']
for name in name_list:
counts_tail = re.compile('_C[\da-zA-Z_]*$')
if counts_tail.search(name):
print name
输出:
chromerocker_C
chromecar_CMale
chromeone_C1254
Lukate_Aids_Consumer_P
预期产出:
chromerocker_C
chromecar_CMale
chromeone_C1254
'Lukate_Aids_Consumer_P'不应该被包括在内,因为它没有'_C'结束,我如何编辑我的代码来处理这个错误?
由于
答案 0 :(得分:1)
您只需要从最后一个字符类中删除_
。
counts_tail = re.compile('_C[\da-zA-Z_]*$')
^
|
所以正确的形式是,
name_list = ['chrome_PM',
'chrome_P',
'chromerocker_C',
'chromebike_P1',
'chromecar_CMale',
'chromeone_C1254',
'Lukate_Aids_Consumer_P']
for name in name_list:
counts_tail = re.compile('_C[\da-zA-Z]*$')
if counts_tail.search(name):
print name
由于字符类中存在_
,因此它与_Consumer_P
中的Lukate_Aids_Consumer_P
子字符串匹配。
答案 1 :(得分:0)
<强>代码强>
name_list = ['chrome_PM',
'chrome_P',
'chromerocker_C',
'chromebike_P1',
'chromecar_CMale',
'chromeone_C1254',
'Lukate_Aids_Consumer_P']
for name in name_list:
counts_tail = re.compile('_C(\d|[a-zA-Z])*$') # Added *
# Unnecessary use of + in both \d and [a-zA-Z] (thanks to @Ashwani Dausodia)
if counts_tail.search(name):
print name
<强>输出强>
chromerocker_C
chromecar_CMale
chromeone_C1254
答案 2 :(得分:0)
您发现_
的最后一次出现后跟C
:
for name in name_list:
index = name.rfind('_')
if(name[index+1] == 'C'):
print name
记住只有当您的字符串不包含数字,字母和_
以外的字符时,才能使用此功能。否则你可以使用这个正则表达式:
'_C(\d|[a-zA-Z])*$'
这意味着_C
后跟零{或}次\d|[a-zA-Z]
(数字或字母)后跟$
(行尾)。
答案 3 :(得分:0)
使用re.compile('_C[^\W_]*$')
您可以简单地使用re.compile('_C\w*$')
,但\w
也包含_
,这不是必需的。最好的方法是使用re.compile('_C[^\W_]*$')
排除字母,数字和_ 以外的所有内容。
演示:
>>> name_list = ['chrome_PM',
'chrome_P',
'chromerocker_C',
'chromebike_P1',
'chromecar_CMale',
'chromeone_C1254',
'Lukate_Aids_Consumer_P']
>>> for name in name_list:
... counts_tail = re.compile('_C[^\W_]*$')
... if counts_tail.search(name):
... print name
...
chromerocker_C
chromecar_CMale
chromeone_C1254
答案 4 :(得分:0)
name_list = ['chrome_PM',
'chrome_P',
'chromerocker_C',
'chromebike_P1',
'chromecar_CMale',
'chromeone_C1254',
'Lukate_Aids_Consumer_P']
for name in name_list:
counts_tail = re.compile('_C[\da-zA-Z]*$')
if counts_tail.search(name):
print name