Python正则表达式:匹配最后一个字符后面特定模式的实例

2024-09-30 20:28:51 发布

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

我想编辑下面的代码以捕获所有以“\u 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\u Aids\u Consumer\u p”不应包含在内,因为它不以“\u C”结尾,如何编辑代码来处理此错误?你知道吗

谢谢


Tags: 代码name编辑consumer结尾chromelistcounts
3条回答

使用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

您发现最后一次出现的_后面是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](数字或字母)的零次或多次出现,后跟$(行尾)

您只需要从最后一个字符类中删除_。你知道吗

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

由于character类中存在_,因此它匹配Lukate_Aids_Consumer_P中的_Consumer_P子字符串。你知道吗

相关问题 更多 >