regex - 从字符串中解析出 ISIN

标签 regex r statistics

我想从一个非常奇怪的字符串中解析出一个 ISIN,我的代码如下所示:

> df <- fread("C:/Users/WZHPCH/Desktop/Error Messages/df.csv", sep=";", stringsAsFactors=FALSE)
> dput(df)
structure(list(ID = c(1L, 2L, 4L, 2L, 3L, 24L), VAL = c("TES+XS0255015603+ae2s", 
"TEST*XS0255015603+d2aasd", "safd*adf*XS0255015603++", "gasdfs*dsa*US0917971006", 
"asdfsUS0917971006adf", "sd-asd-afds-US0917971006")), .Names = c("ID", 
"VAL"), row.names = c(NA, -6L), class = c("data.table", "data.frame"
), .internal.selfref = <pointer: 0x0000000000110788>)
> df$parsedISIN <- gsub("^[a-zA-Z]{2}[0-9]{10}$", '\\1', df$VAL)

我在使用 gsub 时做错了什么?

有什么推荐吗?

我很感激你的回复!

最佳答案

这里有几个问题:

1) 即使问题使用了 dput该对象中有一个指针,因此它不能在其他系统上使用。我已经编辑了要给出的指针:

df <-
structure(list(ID = c(1L, 2L, 4L, 2L, 3L, 24L), VAL = c("TES+XS0255015603+ae2s", 
"TEST*XS0255015603+d2aasd", "safd*adf*XS0255015603++", "gasdfs*dsa*US0917971006", 
"asdfsUS0917971006adf", "sd-asd-afds-US0917971006")), .Names = c("ID", 
"VAL"), row.names = c(NA, -6L), class = c("data.table", "data.frame"))

2)代码引用df.gem$Attributes .应该是 df$VAL .

3) gsub应该是 sub因为每个组件中只出现一次。

4) 匹配仅在它从字符串的开头开始并在字符串的末尾结束时才匹配,但如果它在字符串内则不匹配,这里就是这种情况。

5) 要使用 sub,我们需要匹配所有内容并仅捕获我们需要的内容,以便我们可以排除不需要的内容。

尝试这个:
pat <- ".*([a-zA-Z]{2}[0-9]{10}).*"
sub(pat, "\\1", df$VAL)

这使:
[1] "XS0255015603" "XS0255015603" "XS0255015603" "US0917971006" "US0917971006"
[6] "US0917971006"

这是正则表达式的可视化,pat :
.*([a-zA-Z]{2}[0-9]{10}).*

Regular expression visualization

Debuggex Demo

注:一个稍微简单的方法是使用 strapplycgsubfn直接提取模式。在这种情况下,正则表达式稍微简化:
library(gsubfn)
strapplyc(df$VAL, "[a-zA-Z]{2}[0-9]{10}", simplify = TRUE)

这是一个可视化:
[a-zA-Z]{2}[0-9]{10}

Regular expression visualization

Debuggex Demo

关于regex - 从字符串中解析出 ISIN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28170820/

相关文章:

python - Pandas 按文本列中的子字符串过滤行

javascript - 正则表达式匹配数组表示法

正则表达式替换R中的所有上标

使用并行计算时 R 卡住,警告 'closing unused connection'

r - 使用 R 计算分类评级但在公差范围内的科恩 Kappa?

regex - 空字符串的 Laravel 正则表达式验证

受限玻尔兹曼机

r - 如何在R中的一个区间内计算 'number of values of a particular variable of a tibble'?

python - numpy:使用更多观察值更新最小二乘法的代码

在测量列表中发现 "big"值变化的算法