这就是我需要的。我有三个典型的例子。我使用一个简单的密码扰乱了所有不要需要的文本。 (如果您有时间和倾向对其进行解码,恭喜,您现在有三行数据,您将无法真正做到这一点。)
我需要正则表达式来提取5位数字,如下面每个例子所述:
> df$Description[1]
[1] "HUUA TJCPOBWJ MJWRQT H/U: CHP CKJU HCPA P D LWCR UBBQMW CKOTWJRCK PWTLWJFCPRO 1000 -WC UJG:/PF07CHPC0492296677 1/KYOQM CPR WPTWJTCQPKWPT JQGLTO JWB: UFOUS-2017-21353/UMKT/YOR2181,44/ TJP: 0077998032BO"
我无法弄清楚如何突出我正在寻找的东西。这是 21353 ,后面紧跟“ - ”。
> df$Description[2]
[1] "HUUA TJCPOBWJ MJWRQT H/U: CHP CKJU HCPA P D LWCR UBBQMW CKOTWJRCK PWTLWJFCPRO 1000 -WC UJG:/PF07CHPC0492296677 1/KYOQM CPR WPTWJTCQPKWPT JQGLTO JWB: UFOUS-2017-22540,22867/UMKT/YOR2164,29/ TJP: 7547499060VO"
这里我感兴趣两个“ - ”之后的5位数字,即 22540 ,以及5-逗号后的数字;的 22687
> df$Description[14]
[1] "MLQZO MJWRQT DQC: IWFFO BCJGU HCPA, P.C./0509 H/U: 1/KYOQM CPR WPTWJTCQPKWPT JQGLTO 3/PF/1012 XV CKOTWJRCK JWB: PHPB=YPQTWR BUJ UZZUJTYPQTS, QPM. AWPT FCAWO, PS 105128199/CM-00000208 5006 UJG=/PF17CHPC0540889229 3/PF/1 012 XV CKOTWJRCK UGH=CHPCPF2C UHQ=U FOUS-2017-23075,24127,25461 HWQPG W YJ 338.87 CT 1.099952 OOP: 0442609 TJP: 8922700153BM"
最后,在这种情况下,我需要像往常一样“ - ”之后的5位数, 23075 和两者的5-逗号后的数字; 24127 和 25461
说我是Regex的新手会严重高估我的能力。这是我试过的:
(-[1-9]{5})|(\,[1-9]{5})
我已经尝试过regex101.com,而且我已经环顾四周了。 (加载文章,我找不到任何让我足够类比我的具体问题的答案。)
它让我接近,但是当“匹配”中有多个匹配时,会留下前面带有“ - ”的子串。
帮助? 一如既往地谢谢!
答案 0 :(得分:3)
使用新包stringr
,并使用正则表达式模式\b\d{5}\b
进行匹配:
library(stringr)
j <- "HUUA TJCPOBWJ MJWRQT H/U: CHP CKJU HCPA P D LWCR UBBQMW CKOTWJRCK PWTLWJFCPRO 1000 -WC UJG:/PF07CHPC0492296677 1/KYOQM CPR WPTWJTCQPKWPT JQGLTO JWB: UFOUS-2017-22540,22867/UMKT/YOR2164,29/ TJP: 7547499060VO"
k <- str_extract_all(j, "\\b(\\d{5})\\b")[[1]]
k
<强>输出:强>
[1] "22540" "22867"
在这里演示:
答案 1 :(得分:1)