正则表达式匹配5位数模式

时间:2017-10-06 02:07:10

标签: regex

我需要什么

这就是我需要的。我有三个典型的例子。我使用一个简单的密码扰乱了所有不要需要的文本。 (如果您有时间和倾向对其进行解码,恭喜,您现在有三行数据,您将无法真正做到这一点。)

我需要正则表达式来提取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,而且我已经环顾四周了。 (加载文章,我找不到任何让我足够类比我的具体问题的答案。)

我得到了什么

它让我接近,但是当“匹配”中有多个匹配时,会留下前面带有“ - ”的子串。

帮助? 一如既往地谢谢!

2 个答案:

答案 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"

在这里演示:

Rextester

答案 1 :(得分:1)

您可以使用此正则表达式:

(?<=[,-])

我的想法是使用Demo.(?!\d)表示“前面有短划线或逗号”,int表示“后面没有数字。”

{{3}}