字符串是相同的(使用 `base::identical`),但与 `grepl` / `gsub` 的行为不同

2023-12-24

相关:将大写单词转换为标题大小写 https://stackoverflow.com/questions/51857207/convert-upper-case-words-to-title-case

一些使用从在线获取的字符串的代码的行为与我预期的不同,您可以通过运行以下命令来重现该问题:

library(xml2)
library(magrittr)
x <- xml2::read_html("https://poesie.webnet.fr/lesgrandsclassiques/Authors/B") %>%
  gsub("^.*?<span>(Pierre-Jean de BÉRANGER)</span>.*$","\\1",.)
x # [1] "Pierre-Jean de BÉRANGER"

该字符串与"Pierre-Jean de BÉRANGER"从页面源复制/粘贴,但是以下行为令我非常不安:

y <- "Pierre-Jean de BÉRANGER"
x == y  # TRUE
identical(x, y) # TRUE
gsub("\\b([A-Z])(\\w+)\\b", "\\1\\L\\2", x, perl = TRUE) # [1] "Pierre-Jean de BÉRANGER"
gsub("\\b([A-Z])(\\w+)\\b", "\\1\\L\\2", y, perl = TRUE) # [1] "Pierre-Jean de Béranger"
grepl("\\bB\\w+", x, perl = TRUE) # FALSE
grepl("\\bB\\w+", y, perl = TRUE) # TRUE
grepl("\\bB\\w", x, perl = TRUE)  # TRUE
grepl("\\bB\\w", y, perl = TRUE)  # TRUE

If x and y是相同的,它们怎么会给出不同的输出?

?identical :

测试两个物体是否安全可靠的方法exactly equal


Edit:

这是一个可观察到的差异:

Encoding(x) # "UTF-8"
Encoding(y) # "latin1"

我在跑R version 3.5.0 on Windows


为了克服这个问题,您需要确保您的模式能够识别 Unicode,以便\w可以匹配所有 Unicode 字母和数字\b可以在 Unicode 字边界处匹配。这可以通过使用 PCRE 动词来实现(*UCP):

gsub("(*UCP)\\b([A-Z])(\\w+)\\b", "\\1\\L\\2", x, perl = TRUE)
      ^^^^^^

为了使其完全使用 Unicode\p{Lu}代替[A-Z]:

gsub("(*UCP)\\b(\\p{Lu})(\\w+)\\b", "\\1\\L\\2", x, perl = TRUE)

另外,如果您不想匹配数字和_,你可以替换\w with \p{L}(任何字母):

gsub("(*UCP)\\b(\\p{Lu})(\\p{L}+)\\b", "\\1\\L\\2", x, perl = TRUE)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

字符串是相同的(使用 `base::identical`),但与 `grepl` / `gsub` 的行为不同 的相关文章

  • 如何用R创建时间散点图?

    数据是一系列日期和时间 date time 2010 01 01 09 04 43 2010 01 01 10 53 59 2010 01 01 10 57 18 2010 01 01 10 59 30 2010 01 01 11 00 4
  • 从总和为所需总数的值列表中确定所有可能的组合

    一位朋友问我一个编程问题 关于如何确定一组值中所有可能的值组合可以相加以获得所需的总数 我有一个解决方案 但它不太优雅 它基本上只是一系列 for 循环和 if 语句 我确信 dplyr 有一个我想不到的解决方案 因为我知道它有多么有用 但
  • 具有变化比例的 gganimate(轴限制)

    我想使用创建一个 gifgganimate 但我的轴范围在一帧中变化很大 这导致所有后续帧都被挤压 In ggplot2的方面 有一个选择scales free 有没有办法让每一帧都有自由比例gganimate 这是一个例子 library
  • 用数组值替换字符串中的模板

    我有一个字符串 可以有简单的模板 我有一个包含替换值的数组 目前我正在用循环来做 但我想把它改成preg replace 你能帮助我吗 Example values array id gt 120 name gt Jim string He
  • 将强化的 data.frame 转换回 sf 对象

    五十斯塔特包提供了一张很棒的美国地图 其中有夏威夷和阿拉斯加 如下图所示 对象五十 州已经得到加强 可以与 ggplot2 一起使用 但是 我想使用 geom sf 将其绘制为 sf 对象 作为一个更普遍的问题 将强化的 data fram
  • 在Python中检测包含非英文字符的字符串

    我有一些混合有英文字母和非英文字母的字符串 例如 w 1991 2 如何使用正则表达式或 Python 中的任何其他快速方法识别这些类型的字符串 我不喜欢将字符串中的字母与字母列表进行逐一比较 而是一次性快速完成此操作 您可以检查该字符串是
  • 在android上使用正则表达式验证字符串

    我希望我的字符串不包含 and 我用这个代码 private static boolean IsMatch String s String pattern try Pattern patt Pattern compile pattern M
  • 保存/加载 data.table 的最快方法

    我想做的实际上是使用最快的可用方法来存储data table以便进一步处理 大致如下 从 CSV RDS 读取原始数据 将其转换为data table 将其保存为针对重新读取而优化的格式 RDS 似乎不适用于data table 是对的吗
  • 仅匹配单词或字符串中的撇号

    我正在寻找一个可以匹配的Python正则表达式 didn t 并仅返回紧接在撇号前面的字符 例如 t 但不是 d or t 在开始和结束时 我努力了 w w 但它只匹配开头的撇号 更多示例 I m 应该只匹配 m并不是 I Erick s
  • 如何找到对象的创建位置?

    我目前正在努力改进对其他脚本有不同调用的代码 我想知道在哪里创建对象 对于其中一些人来说 只需使用文本编辑器的搜索选项即可 只要看看是否obj lt or obj 有什么结果 但这不适用于使用assign功能 在加载的脚本中创建的也不是 T
  • 不同大小组的高效递归随机抽样

    这个问题是我之前关于递归随机抽样问题的后续问题高效的递归随机采样 https stackoverflow com questions 69824065 efficient recursive random sampling 当组大小相同或每
  • 数据集子集的回归

    我想做以下事情并需要一些帮助 分别计算 身高 与 年龄 的斜率和截距 lm Height Age 一 每个人 二 性别 并创建一个包含结果 斜率和截距 的表 我可以使用 申请 吗 在下一步中 我想做一个统计测试 以确定性别之间的斜率和截距是
  • C# 中的高级替换

    我喜欢用 C 替换 xml 字符串 中的一些属性 示例 XML
  • 在 R 中将本地日期时间转换为 UTC

    如何将本地日期时间转换为以下格式 12 31 2014 6 42 52 PM R 中的 UTC 我试过这个 as POSIXct as Date 12 31 2014 6 42 52 PM format m d Y H M S tz UTC
  • Ansible:findall 正则表达式中变量的正确语法是什么

    我使用的是 Ansible 版本 2 9 我想做一个 GET 它返回一个信息块 从该信息中正则表达式一个 ID 该 ID 对应于我目前正在迭代的任何主机 然后使用该 ID 执行操作 我有正则表达式工作 https regex101 com
  • 为 PDF 输出添加 natbib 选项

    有没有办法指定natibib输出 PDF 时的选项bookdown 我希望 tex 输出具有命令 usepackage sort compress natbib 但似乎没有任何方法可以在 YAML 中指定它 我无法将命令添加到我的序言中 因
  • 是否可以使用像“tz=NULL”这样的东西?...“as.POSIXct”默认为依赖于语言环境的时区(与“as.Date”不同),这会导致问题

    我知道这是一个长期存在 根深蒂固的问题 但这是我经常遇到的问题 而且我看到初学者R经常与此斗争 我希望有一个令人满意的解决方案 到目前为止 我的谷歌和 SO 搜索都是空的 但如果在其他地方重复 请指出正确的方向 TL DR 有没有办法使用类
  • 不同的分位数:箱线图与小提琴图

    require ggplot2 require cowplot d iris ggplot2 ggplot d aes factor 0 Sepal Length geom violin fill black alpha 0 2 draw
  • 使用梯度下降(最速下降)估计线性回归

    示例数据 X lt matrix c rep 1 97 runif 97 nrow 97 ncol 2 y lt matrix runif 97 nrow 97 ncol 1 我已经成功创建了成本函数 COST lt function th
  • 哪种 LaTeX 包与 knit 一起使用以获得更多的表格控制?禁忌?

    我正在用 knitr 写一张更长的桌子xtable和tabular environment longtable 在 longtable 包中时print将它们纳入我的 Rnw file 问题是我对longtable环境控制不够 我有一些文本

随机推荐

  • Python 中循环链表的帮助

    我正在尝试制作一个循环单链表 我希望能够修改我的代码以获得单一喜欢的列表 但我遇到了一些麻烦 对于我的链接列表 我有 class Link object def init self data next None self data data
  • 在运行时获取 RecyclerView 子视图的高度

    我正在尝试制作一个可扩展的 TextView 当用户按下按钮时它会展开 折叠 TextView 和 ImageButton 位于 CardView 中 该 CardView 添加到 RecyclerView 中 展开 折叠效果很好 但现在我
  • ViewPager2 崩溃

    我正在将高级导航组件与 BottomNavigationView 一起使用 In one tab我有ViewPager2 当我第一次单击该选项卡时 效果很好 尽管第二次 来吧 该选项卡应用程序不断崩溃 下面是崩溃日志 我怎样才能解决这个问题
  • 按下后退按钮时提示用户

    哪个是询问用户单击后退按钮时是否要退出应用程序的好地方 我考虑过onPause and onStop 但是只要应用程序落后于其他应用程序 这些方法就会触发 更新 应用程序还应该询问用户是否尝试通过按钮 在应用程序本身中 退出应用程序 而不是
  • 提取第二层嵌套字典中的所有键

    我想提取 2d 字典第二级中的所有键 但 python 解释器返回 NameError 我的预期结果是 aa bb cc aaa bbb ccc gt gt gt adict defaultdict
  • 在c#中如何检查文件是否正在使用? [复制]

    这个问题在这里已经有答案了 如何检查我正在处理的 Excel 文件 操作其数据 删除它或覆盖它 是否正在被另一个程序使用 以及如何从中释放它 请指导我使用 C 尝试用 用于写作 的标志打开 如果失败 该文件将被其他进程 获取 FileStr
  • 使用 JQuery 发布 JSON 并设置 HTTP 内容类型 - 'application /json'

    我正在使用 jquery 将 Json 数据发布到服务器 但是 当我发出如下的帖子请求时 ajax type POST url uri data jsonStrJson contentType application json succes
  • 从剪贴板(从 Excel 粘贴)获取包含重音字符的 CSV 数据

    SCENARIO 我的用户将从 Excel 复制单元格 从而将其放入剪贴板 我的应用程序将从剪贴板检索这些单元格 问题 我的代码从剪贴板检索 CSV 格式 但是 如果原始 Excel 内容包含像 带变音符号的字符 这样的字符 则检索到的 C
  • 如何将对象传递到 Thymeleaf 中的模式对话框?

    我有一个thymeleaf在表中显示数据库内容 人员 的页面 tr td td td td td td td td tr
  • 使用反射时如何确定方法是否返回动态类型?

    使用反射时 可以检查字段 属性 索引器和参数的 DynamicAttribute 属性 以确定它们是否具有动态类型 但是 这不适用于方法 即使它们返回 动态 但它们没有属性 并且返回类型是 对象 并且也没有属性 Visual Studio
  • MySQL 上的死锁与锁等待超时 [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 谁能详细解释一下 MySQL 5 1 上发现的死锁和锁等待错误的区别 难道只是一样吗 什么时候会发生死锁错误 什么时候会发生lockwait超时 A
  • 是否可以将方法参数传递给方法上的注释?

    假设我们有这个带有注释的方法 Cached key search id public static List
  • 函数引用:预期的绑定生命周期参数,找到的具体生命周期[E0271]

    关于这个主题已经有很多线程 但我无法看到讨论的问题是否适用于我的特定问题 我有一个存储 a 的结构name and a callback功能 剥离到问题看起来像这样 pub struct Command lt a gt name a str
  • 如何使用ios图表设置x轴标签

    我最近开始使用 ios 图表库 但无法找到有关如何使用 swift3 更新操作 x 轴的信息 我想要做的是用时间值标记 x 轴 例如2 03 00 2 03 01 2 03 02等 在我在网上找到的教程中 这似乎很容易 其中许多使用一年中的
  • Selenium 支持无头浏览器测试吗?

    我现在正在查看 Selenium Server 我似乎没有注意到支持无头浏览器测试的驱动程序 除非我弄错了 否则它不支持 如果您使用的是 X 您可以创建一个虚拟帧缓冲区来隐藏浏览器窗口 但这并不是真正的无头浏览器 谁能启发我吗 Seleni
  • 在选择时更改 Android ListView 文本的文本颜色

    我不明白我做错了什么 我有一个带有自定义layout xml 文件的ListView 在那里 我定义了一个像这样的 TextView
  • AWS 存储桶策略错误:策略具有无效操作

    我有一个非常基本的目标 将我的存储桶中的所有内容共享给特定用户列表 只读 这曾经与名为 s3cmd 的工具一起使用 我需要做的就是将用户 通过电子邮件标识 添加到Access Control List with Read Permissio
  • gdb布局asm在mac上不起作用?

    gdb test gdb start Breakpoint 1 at 0x100000ec8 Starting program private tmp test Reading symbols for shared libraries do
  • jQuery 显示 5 秒然后隐藏

    我在用着 show成功提交表单后显示隐藏消息 如何让消息显示5秒然后隐藏 您可以使用 delay http api jquery com delay 在动画之前 像这样 myElem show delay 5000 fadeOut 如果不是
  • 字符串是相同的(使用 `base::identical`),但与 `grepl` / `gsub` 的行为不同

    相关 将大写单词转换为标题大小写 https stackoverflow com questions 51857207 convert upper case words to title case 一些使用从在线获取的字符串的代码的行为与我