【问题标题】:Extract string within first two quotation marks using regular expressions?使用正则表达式提取前两个引号内的字符串?
【发布时间】:2021-07-14 14:52:44
【问题描述】:

有一个字符串向量,如下所示(带有两个或多个引号的子字符串的文本):

vec <- 'ab"cd"efghi"j"kl"m"'

第一对引号 (cd) 中的文本包含一个有用的标识符(cd 是所需的输出)。我一直在研究如何使用正则表达式,但我还没有学会如何找到引号之类的第一次和第二次出现。

这是我获得 cd 的方式:

tmp <- strsplit(vec,split="")[[1]]
paste(tmp[(which(tmp=='\"')[1]+1):(which(tmp=='\"')[2]-1)],collapse="")
"cd"

我的问题是,还有其他方法可以使用正则表达式找到“cd”吗?为了了解更多如何使用它们。我更喜欢基本 R 解决方案,但如果这是唯一的方法,我会接受使用包的答案。感谢您的帮助。

【问题讨论】:

    标签: r regex


    【解决方案1】:

    匹配除" 之外的所有内容,然后捕获直到下一个" 的所有内容,并自行替换捕获的组。

    gsub( '[^"]*"([^"]*).*', '\\1', vec)
    
    [1] "cd"
    

    正则表达式的详细解释可以看this demo

    【讨论】:

    • 非常感谢。那很快:“您必须等待 7 分钟才能接受此答案”。现在来了解它是如何工作的。
    • 很高兴它帮助了@Baroque,您可以接受只有通过阈值的答案。我已经添加了它如何工作的解释。希望也有帮助:)
    • 你能解释一下为什么这不返回“km”吗?我认为模式匹配是“贪婪的”并且会计算最后可能的匹配。
    • @IRTFM,先生,它将仅返回前 2 个 " 之间匹配的字符串,因为它将匹配(不捕获第一个 " 然后 " 的所有内容,然后捕获除 " 之外的所有内容(即第二个")。希望现在很清楚
    • 为什么不需要在开头使用“^”锚定或使用“?”将贪婪转换为惰性正则表达式匹配?
    猜你喜欢
    • 1970-01-01
    • 2017-03-09
    • 1970-01-01
    • 2017-04-15
    • 2018-03-06
    • 2016-08-20
    • 2020-11-02
    • 2018-01-25
    • 1970-01-01
    相关资源
    最近更新 更多