我正在尝试使用python提取字符串模式:
必须以大写字母'C'
中间部分可以包含/
必须以一位或两位数结尾
示例字符串:
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
然而,它没有产生预期的结果。我试图在正则表达式中添加“[]”,但它仍然不起作用:(任何人都可以给我一些建议吗?非常感谢!
答案 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)
答案 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个或多个。
)