strsplit 与 gregexpr 不一致

2024-06-28

一条评论 https://stackoverflow.com/questions/23961022/split-strings-on-first-and-last-commas/23964843?noredirect=1#comment36923487_23964843关于我的回答这个问题 https://stackoverflow.com/a/23964843/1478381 which should使用给出所需的结果strsplit不,尽管它seems正确匹配字符向量中的第一个和最后一个逗号。这可以证明使用gregexpr and regmatches.

那么为什么strsplit在此示例中按每个逗号进行拆分,即使regmatches只返回两个匹配项same regex?

#  We would like to split on the first comma and
#  the last comma (positions 4 and 13 in this string)
x <- "123,34,56,78,90"

#  Splits on every comma. Must be wrong.
strsplit( x , '^\\w+\\K,|,(?=\\w+$)' , perl = TRUE )[[1]]
#[1] "123" "34"  "56"  "78"  "90" 


#  Ok. Let's check the positions of matches for this regex
m <- gregexpr( '^\\w+\\K,|,(?=\\w+$)' , x , perl = TRUE )

# Matching positions are at
unlist(m)
[1]  4 13

#  And extracting them...
regmatches( x , m )
[[1]]
[1] "," ","

啊?!到底是怎么回事?


@Aprillion 的理论是准确的,来自R 文档 http://stat.ethz.ch/R-manual/R-devel/library/base/html/strsplit.html:

应用于每个输入字符串的算法是

repeat {
    if the string is empty
        break.
    if there is a match
        add the string to the left of the match to the output.
        remove the match and all to the left of it.
    else
        add the string to the output.
        break.
}

换句话说,在每次迭代时^将匹配新字符串的开头(没有前面的项目。)

为了简单地说明这种行为:

> x <- "12345"
> strsplit( x , "^." , perl = TRUE )
[[1]]
[1] "" "" "" "" ""

Here https://stackoverflow.com/a/15578980/980833,您可以使用前瞻断言作为分隔符来查看此行为的结果(感谢@JoshO'Brien 提供的链接。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

strsplit 与 gregexpr 不一致 的相关文章

随机推荐

  • 如何在textarea元素中添加新行?

    我想在文本区域中添加换行符 我尝试过 n and br 标签但不工作 您可以看到上面的 HTML 代码 你能帮我在文本区域中插入换行符吗
  • Flutter - SingleChildScrollView 在打开键盘时不会滚动到列底部

    我在应用程序的许多地方使用了 SingleChildScrollView 一切都很好 但是 在下面的场景中 当键盘弹出时 它无法滚动到列的底部 Future
  • WiX EmbeddedChainer 示例?

    With Windows安装程序 http en wikipedia org wiki Windows Installer4 5 添加了一个新表微星嵌入式链接器 http msdn microsoft com en us library w
  • 在hadoop中将文件作为单个记录读取

    我有很大的不 对于小文件 我想使用合并文件输入格式来合并文件 以便每个文件数据在我的 MR 作业中作为单个记录 我已关注http yaseminavulous blogspot in 2011 03 many small input fil
  • YouTube API Android 自动启动

    我在我的应用程序中使用 YouTube API 我的问题是 视频不会自动播放 用户必须按播放按钮才能开始播放 My code setContentView R layout playerview demo YouTubePlayerView
  • jQuery 仅验证远程 onblur,但允许 onkeyup 休息 [重复]

    这个问题在这里已经有答案了 我正在尝试进行 jquery 远程验证以查看名称是否唯一 但我不想对每个 onkekup 事件进行远程验证 但是我想在模糊事件上执行此操作 当用户离开文本框时 但使用我下面的当前代码 它会在按下第二个字符后启动
  • OpenCV 和 QT 之间的集成

    我对 QT 和 OpenCV 开发完全是新手 一般来说是 C 我想使用 OpenCV 开发一个应用程序并使用 Qt 创建其界面 我不明白的是 如何整合这两个部分 我的意思是 为了开发 java 我只使用 eclipse 它为我提供了 JFr
  • Maven 构建成功,但没有在 Selenium 中执行测试

    编辑 我已将项目上传到 github 供任何想查看的人使用https github com hfunsh test automation git https github com hfunsh test automation git 我使用
  • 如何在 ASP.net core 中为自定义模型绑定器编写单元测试

    我已经为属性编写了自定义模型绑定器 现在我正在尝试编写相同的单元测试 但无法为模型绑定器创建对象 谁能帮我 下面是我必须编写测试的代码 public class JourneyTypesModelBinder IModelBinder pu
  • IIS Express - Visual Studio - 在同一端口上运行多个站点

    我有多个使用同一端口 8888 的 API 这些 API 是不同解决方案的一部分 http localhost 8888 api1 http localhost 8888 api1 http localhost 8888 api2 http
  • Matplotlib动画无法保存

    我正在尝试学习如何使用创建 matplotlib 动画Jake Vanderplas 的基本示例 http jakevdp github io blog 2012 08 18 matplotlib animation tutorial 但我
  • MSBuild 发布 dotnet 核心应用程序

    我的设置是 我有一个解决方案 其中包含不同的 dotnet4 6 应用程序 服务 现在我们在此解决方案中添加了一个 dotnet core 项目 我可以构建和调试它 但这不会创建可执行文件 在 Visual Studio 中 我可以右键单击
  • Java EE 异常:名称 java:comp 未在此上下文中绑定

    我在 Netbeans 7 2 1 中有 Java EE 应用程序 尝试部署它 构建结束正常 我在 Tomcat 日志中收到错误 Caused by javax naming NameNotFoundException Name java
  • 在 C# 中解析 Json Rest api 响应[重复]

    这个问题在这里已经有答案了 我正在尝试使用 C 从 Rest api json 响应中提取值 我有以下代码 client BaseUrl https api cloud appcelerator com request Resource v
  • 在我的表单 Symfony2 中创建重复字段

    我正在开展一个大学项目 我想让所有学生都参加 我创建了一个包含 3 个字段的模型 即日期 当前 布尔值 和学生 ID 现在 当我尝试从中生成表单时 它只会显示这 3 个字段 但是我想要班上所有的学生 因此 我为学生创建了一个循环 并创建了一
  • 存储聊天消息和文件的最佳方式

    我想知道您对将聊天消息存储在数据库中有何看法 我需要能够将其他内容绑定到它们 例如文件或联系人 并且使用数据库是我目前看到的最佳方法 文件也有同样的问题 因为它们可以绑定到聊天消息 我也必须将它们存储在数据库中 对于数千条消息和文件 我想知
  • Meteor:RangeError:超出最大调用堆栈大小

    我收到以下错误 W20141210 18 14 54 394 5 5 STDERR W20141210 18 14 54 395 5 5 STDERR Users removed meteor packages meteor tool 1
  • 如何构建 FFMPEG 并将其链接到 iOS?

    all 我知道 这里有很多关于 iOS 上的 FFMPEG 的问题 但没有一个答案适合我的情况 当我尝试在项目中链接 FFMPEG 时 每种情况都会发生一些奇怪的情况 所以请帮助我 我的任务是为 iOS 编写视频聊天应用程序 该应用程序使用
  • 如何在 Codeigniter 3 中上传时显示不允许的文件类型错误消息?

    我正在做一个基本的工作博客应用程序 https github com Ajax30 lightblog with 代码点火器 3 1 8 and 引导程序4 当然 这些帖子有主要图片 有一个默认图像如果用户没有上传图像 但是如果有图像is已
  • strsplit 与 gregexpr 不一致

    一条评论 https stackoverflow com questions 23961022 split strings on first and last commas 23964843 noredirect 1 comment3692