You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改正则表达式捕获指定词到第二个分号间的内容?

R语言正则表达式捕获指定字段解决方案

原正则str_match(x, "Cartoon Car \\(\\s*(.*?)\\s*;")[,2]仅捕获到姓名,是因为.*?是非贪婪匹配,遇到第一个;就终止匹配。要捕获DAFFY DUCK; daffyduck@disney.com(姓名+邮箱),可通过以下两种方法修改正则:

方法一:精准匹配非分号字符

利用[^;]+匹配不含分号的字段,覆盖姓名和邮箱两个部分:

library(stringr)
x <- "Focal Point (BUGS BUNNY; bugs.bunny@looonytune.car; 888-555-1111)\nCartoon Car (DAFFY DUCK; daffyduck@disney.com; 888-555-1112)\nCartoon Official Rep (GOOFY NONAME; goofy.noname@loonytune.car; 888-555-1113)"

result <- str_match(x, "Cartoon Car \\(\\s*([^;]+;\\s*[^;]+)\\s*;")[,2]
print(result)
# 输出: "DAFFY DUCK; daffyduck@disney.com"
  • [^;]+:匹配任意不含分号的字符串,第一个匹配姓名,第二个匹配邮箱
  • \\s*:匹配任意数量的空格,兼容字段间的空格差异

方法二:使用零宽断言提取

通过正向/反向预查限定提取范围,无需额外捕获分组:

result <- str_extract(x, "(?<=Cartoon Car \\(\\s)[^;]+;\\s*[^;]+(?=\\s*;)")
print(result)
# 输出: "DAFFY DUCK; daffyduck@disney.com"
  • (?<=Cartoon Car \\(\\s):反向预查,确保目标内容前是Cartoon Car (及任意空格
  • (?=\\s*;):正向预查,确保目标内容后是任意空格和分号
  • 中间的匹配规则与方法一一致,直接提取所需内容

内容的提问来源于stack exchange,提问作者darth_chaos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 12:33:15