2016-10-04 141 views
0

的一部分,我有以下字符串正则表达式提取字符串

> ma1.andl_4_1000x20x20_k1=1,k2=2,k3=1.csv. 

我需要提取部分k1=1,k2=2,k3=1。我用R中的substr()来提取。

substr(str, 23, nchar(str) - 4) 

但是我正在寻找一个正则表达式来提取值。

+0

所以相当有价值的信息,它只是这一个字符串,你正在寻找一个确切的事情?如果你正在寻找确切的东西(这个问题不清楚),你难道不能简单地瞄准你正在寻找的东西吗?例如,为什么'gsub(“。+(k1 = 1,k2 = 2,k3 = 1)。+”,“\\ 1”,txt,perl = TRUE)'就足够了? – Jota

回答

0

如果您需要提取k1=1,k2=2,k3=1的substr,如Jota指出的那样,并且如果它是如此特定的字符串,那么他的解决方案就是您想要的。

对于通用的解决方案,可以轻松捕获kx=y,ka=b,kj=k你需要Capture a Repeated Group,您的团队我是kx=y,其中x是任何数字,y是任何数字和,。为了简单起见,我忽略了点号.

REGEX

((?:k\d{1,}=\d{1,}(?:,|\.)?)+) 

BREAKDOWN

( - 开口捕获托架

(?: - 打开非捕获托架,这将被重复以捕获整个图案

k\d{1,}=\d{1,} - 胆量,允许kx=y

(?:,|\.) - 匹配逗号和最后一个点,以允许匹配的kx=y(?:,|.)

)+整个图案 - 紧密非捕获支架,重复该模式,以捕获整个组

) - 关闭捕获支架

...你就完成了。正则表达式将工作,但我根本不使用R因此无法测试。

阅读的链接,整个网站是正则表达式

+0

@Jota我用正则表达式好友测试过,但不是在'R'中,我不知道你必须在'R' – gwillie

+0

中转义元字符谢谢@gwillie的详细解释。这真的很有帮助。是的,数字确实改变了。 – SriniShine