在python中,正则表达式必须以字母开头,以数字结尾

在python中,正则表达式必须以字母开头,以数字结尾,python,regex,Python,Regex,我正在尝试使用python提取字符串模式: 必须以大写字母“C”开头 中间部分可以包含/ 必须以一个或两个数字结尾 示例字符串: 193 skol C/12 334 skol C/6 577 skol C12 345 skol C6 预期的匹配结果将是: C/12 C/6 C12 C6 这就是我的正则表达式的样子: df['a'].str.extract('^[C]\/?\d{1,2}$') 但是,它没有生成预期的结果。我尝试在正则表达式中添加“[]”,但仍然不起作用:(有人能给我一些建

我正在尝试使用python提取字符串模式:

  • 必须以大写字母“C”开头

  • 中间部分可以包含/

  • 必须以一个或两个数字结尾

  • 示例字符串:

    193 skol C/12
    334 skol C/6
    577 skol C12
    345 skol C6
    
    预期的匹配结果将是:

    C/12
    C/6
    C12
    C6
    
    这就是我的正则表达式的样子:

    df['a'].str.extract('^[C]\/?\d{1,2}$') 
    
    但是,它没有生成预期的结果。我尝试在正则表达式中添加“[]”,但仍然不起作用:(有人能给我一些建议吗?非常感谢!

    试试这个:

    \C(\/|)\d{1,2}$
    
    \C
    -Catch literal upper C
    (/\ |)
    -捕获文字
    /
    或无(管道simbol,后面没有匹配项)
    \d{1,2}$
    -在结尾处找到一个或两个数字

    代码:

    您可以使用正则表达式

    C\/?\d{1,2}
    

    工作原理:

    (捕获组#1.将多个令牌分组在一起,并创建一个捕获组,用于提取子字符串或使用反向引用

    C字符。匹配一个“C”字符(字符代码67)

    /转义字符。匹配“/”字符(字符代码47)

    ?可选。匹配前面标记的0和1

    \d位。匹配任何数字字符(0-9)

    +加上。匹配前面的一个或多个标记


    )

    您可以使用:
    r'\bC/?\d{1,2}\b'
    看起来您也在尝试匹配行首和行尾。但行首位置都不会直接出现在“C”之前。或许可以尝试从你的比赛中删除^and$?@depwl9992谢谢你的建议,它很有效!@QianLi如果你的问题得到了回答,请不要忘记将其中一个答案标记为解决方案。如果你想给depwl9992评分,你可以让他们将他们的评论变成一个答案。为什么反斜杠避开
    C
    ,为什么不使用
    \/?
    而不是管道?因为有些匹配需要捕捉反斜杠,或者不捕捉反斜杠,例如
    C6
    C\12
    。因此,管道为空的空组将获得反斜杠或无。
    C\/?\d{1,2}
    
    import pandas as pd    
    a = pd.Series(['193 skol C/12','334 skol C/6','577 skol C12','345 skol C6'])
    
    a.str.extract('(C\/?\d+)')
    
    0    C/12
    1     C/6
    2     C12
    3      C6