R 正则表达式:匹配相同字符串的部分,但不包括特定部分

R 正则表达式:匹配相同字符串的部分,但不包括特定部分,r,regex,R,Regex,我有这个字符串“ACC_或.A5J1.01A”。现在我想匹配除01之外的所有内容 到目前为止,我一直使用模式*\.,它匹配01A之前的所有内容。现在我还想匹配最后一个字符“A”(实际上可以是任何字符)。最后,我希望所有内容都匹配,除了01(也可以是任意两位数字)。 我的问题是,是否有一种方法可以捕获所有内容并排除2位数字01 编辑:我在R中使用它,我的想法是捕获这些部分,这样我就可以使用sub()函数并用“替换匹配的部分。最后,我想要的是得到2位数字。看起来没有正则表达式,这个问题可以更好地解决

我有这个字符串
“ACC_或.A5J1.01A”
。现在我想匹配除
01
之外的所有内容
到目前为止,我一直使用模式
*\.
,它匹配01A之前的所有内容。现在我还想匹配最后一个字符
“A”
(实际上可以是任何字符)。最后,我希望所有内容都匹配,除了
01
(也可以是任意两位数字)。 我的问题是,是否有一种方法可以捕获所有内容并排除2位数字
01


编辑:我在
R
中使用它,我的想法是捕获这些部分,这样我就可以使用sub()函数并用
替换匹配的部分。最后,我想要的是得到2位数字。

看起来没有正则表达式,这个问题可以更好地解决。如果只需要从字符串中排除倒数第二个字符,可以通过
string.substr()
这样做:

let str=“ACC_或.A5J1.01A”;

log(str.substr(0,str.length-3)+str.substr(-1))以匹配2位数字前后的内容,您可以使用2个捕获组

由于没有空格(
*
也将匹配空格),您可以使用
\S
匹配非空白字符

(\S+\.)\d{2}(\S)
  • (\S+\)
    捕获组1,匹配1+非空白字符直到最后一个点
  • \d{2}
    匹配两位数字
  • (\S)
    捕获组2,匹配非空白字符
然后你可以分别使用这两组


或者您可以使用
\K
匹配数字并替换为emtpy字符串

\S+\.\K\d{2}(?=\S)
  • \S+\。
    匹配1+个非空白字符,直到最后一个点
  • \K
    忘记匹配的内容
  • \d{2}
    匹配两位数字
  • (?=\S)
    断言右边的是非whitspace字符
|

比如说

sub("\\S+\\.\\K\\d{2}(?=\\S)", "", "ACC_OR.A5J1.01A", perl=TRUE)
输出

[1] "ACC_OR.A5J1.A"
01

您只需要在最后一个字符之前提取这两个字符。你可以阅读更多关于


它是两个单独的匹配项,
ACC_还是.A5J1。
A
否,我想用一个表达式匹配它。是否可以忽略01,只匹配ACC_或A5J1。还有一个?我对正则表达式比较陌生。更多信息,我在R中使用它。我有一个类似于前面提到的字符串列表,我想生成一个新的列表,它只包含两个数字。使用sub()函数,我希望替换匹配的字符串,并将其替换为零,因此最后我只有2位数字。仅当替换时。无法在一个匹配操作中匹配字符串的非相邻部分。为什么需要正则表达式?这可以通过简单的字符串操作来完成,只需提取除两个你想忽略的字符之外的所有字符就像我说的我对这一切都不熟悉一样,你能解释一下你将如何使用什么函数来实现这一点吗?现在我只尝试使用正则表达式,我可以创建我的通缉名单,但使用正则表达式需要两个步骤。如果有一个一次性的方法,请告诉我。提前谢谢。非常感谢,这正是我需要的
01