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

时间:2017-08-29 15:45:58

标签: python regex

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

  1. 必须以大写字母'C'

  2. 开头
  3. 中间部分可以包含/

  4. 必须以一位或两位数结尾

  5. 示例字符串:

    DF <- read.csv2("FILE PATHWAY", header=TRUE, sep = ",", stringsAsFactors = 
    F, skip=1 )
    DF <- DF[DF$Type=="AHREF",]
    DF <- select(Type,Source,Destination)
    # Error occurs here with this: Error in select(Type, Source, Destination) : object 'Type' not found
    DF <- as.data.frame(sapply(DF,gsub,pattern="#URL DELETED",replacement=""))
    DF <- as.data.frame(sapply(DF,gsub,pattern="#URL DELETED",replacement=""))
    DF <- as.data.frame(sapply(DF,gsub,pattern="\"",replacement=""))
    DF <- subset(DF, !grepl("^https", DF$Source))
    DF <- subset(DF, !grepl("^https", DF$Destination))
    colnames(DF) <- c("From","To")
    rownames(DF) <- NULL
    graphObject = graph.data.frame(DF, directed = TRUE)
    graphObject = simplify(as.undirected(graphObject))
    

    预期的匹配结果将是:

    193 skol C/12
    334 skol C/6
    577 skol C12
    345 skol C6
    

    这是我的正则表达式:

    C/12
    C/6
    C12
    C6
    

    然而,它没有产生预期的结果。我试图在正则表达式中添加“[]”,但它仍然不起作用:(任何人都可以给我一些建议吗?非常感谢!

3 个答案:

答案 0 :(得分:2)

试试这个:

\C(\/|)\d{1,2}$

\C - Catch literal upper C
(/\|) - 抓住文字/或无(管道辛博尔之后没有匹配)
\d{1,2}$ - 在结尾处抓住两个数字

代码:

df['a'].str.extract(r'\C(\/|)\d{1,2}$') 

答案 1 :(得分:1)

您可以使用正则表达式

C\/?\d{1,2}

请参阅regex demo

答案 2 :(得分:0)

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

为什么会这样:

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

C角色。匹配&#34; C&#34;字符(字符代码67)。

/逃脱的角色。匹配&#34; /&#34;字符(字符代码47)。

?可选的。匹配前面标记的0到1之间。

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

+ Plus。匹配前面标记中的1个或多个。