【问题标题】:Regex expression starting from a certain character从某个字符开始的正则表达式
【发布时间】:2018-07-13 14:18:20
【问题描述】:

示例:"example._AL(5)._._4500_GRE/Jan_2018" 我正在尝试从上面包含括号的字符串中提取文本。我想提取从AL 开始的所有内容。

输出应如下所示:"AL(5)._._4500_GRE/Jan_2018"

【问题讨论】:

  • 一个简单的"(AL.+)" 就可以了
  • 那你为什么要标记 Python 和 Javascript?
  • 尝试一下兄弟...

标签: r regex


【解决方案1】:

关于我们可以假设什么是已知的存在一些问题,但这里有一些变体可以做出各种假设。

1) word(这会删除第一个单词之前的所有内容,然后是括号。

  • “^”匹配字符串的开头
  • ".*?"是任何东西中最短的匹配,只要我们仍然匹配正则表达式的其余部分
  • "\\w+" 匹配一个单词
  • "\\(" 匹配左括号
  • (...) 形成一个捕获组,替换字符串可以引用为“\\1”

代码

x <- "example.AL(5)._._4500_GRE/Jan_2018"
sub("^.*?(\\w+\\()", "\\1", x)
## [1] "AL(5)._._4500_GRE/Jan_2018"

1a) 或匹配一个后跟 ( 后跟任何内容的单词并提取:

library(gsubfn)
strapplyc(x, "\\w+\\(.*", simplify = TRUE)
## [1] "AL(5)._._4500_GRE/Jan_2018"

2) AL( 或者如果我们知道这个词是AL 那么:

sub("^.*?(AL\\(.*)", "\\1", x)
## [1] "AL(5)._._4500_GRE/Jan_2018"

3) 最多删除第一个点,或者如果我们知道要删除的部分是第一个点之前的部分(包括第一个点):

sub("^.*?\\.", "", x)
## [1] "AL(5)._._4500_GRE/Jan_2018"

4) 点分隔字段 如果输入的格式是点分隔字段,我们可以像这样一次将它们全部解析出来:

read.table(text = x, sep = ".", as.is = TRUE)
##        V1    V2 V3                 V4
## 1 example AL(5)  _ _4500_GRE/Jan_2018

【讨论】:

  • 也只是sub("^.+(?=AL)", "", "example._AL(5)._._4500_GRE/Jan_2018", perl=TRUE),使用前瞻来删除字符串开头的任何内容,然后是"AL"
  • 非常感谢!!
  • @dishdash 如果答案解决了您的问题,请接受它
猜你喜欢
  • 1970-01-01
  • 2019-08-06
  • 2016-11-14
  • 1970-01-01
  • 2011-08-13
  • 2017-11-24
  • 1970-01-01
  • 1970-01-01
  • 2020-12-28
相关资源
最近更新 更多