的一部分,我有以下字符串正则表达式提取字符串
> 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)
但是我正在寻找一个正则表达式来提取值。
的一部分,我有以下字符串正则表达式提取字符串
> 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)
但是我正在寻找一个正则表达式来提取值。
如果您需要提取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
因此无法测试。
阅读的链接,整个网站是正则表达式
@Jota我用正则表达式好友测试过,但不是在'R'中,我不知道你必须在'R' – gwillie
中转义元字符谢谢@gwillie的详细解释。这真的很有帮助。是的,数字确实改变了。 – SriniShine
所以相当有价值的信息,它只是这一个字符串,你正在寻找一个确切的事情?如果你正在寻找确切的东西(这个问题不清楚),你难道不能简单地瞄准你正在寻找的东西吗?例如,为什么'gsub(“。+(k1 = 1,k2 = 2,k3 = 1)。+”,“\\ 1”,txt,perl = TRUE)'就足够了? – Jota