如何在正则表达式中处理 \^$.?*|+()[{ 等特殊字符?

2024-02-10

我想匹配一个正则表达式特殊字符 http://www.regular-expressions.info/characters.html, \^$.?*|+()[{。我试过:

x <- "a[b"
grepl("[", x)
## Error: invalid regular expression '[', reason 'Missing ']''

(相当于stringr::str_detect(x, "[") or stringi::stri_detect_regex(x, "[").)

将值加倍来转义是行不通的:

grepl("[[", x)
## Error: invalid regular expression '[[', reason 'Missing ']''

使用反斜杠也不行:

grepl("\[", x)
## Error: '\[' is an unrecognized escape in character string starting ""\["

如何匹配特殊字符?


在一些古老且写得足够好的问题中,有一些特殊情况,可以厚颜无耻地以与此重复的方式结束:
R 正则表达式中的转义句点 https://stackoverflow.com/questions/6638072/escaped-periods-in-r-regular-expressions
如何转义R中的问号? https://stackoverflow.com/questions/10602433/how-to-escape-a-question-mark-in-r
在正则表达式中转义管道(“|”) https://stackoverflow.com/questions/12940851/escaping-pipe-in-a-regex


使用双反斜杠转义

R 将反斜杠视为转义值字符常量 http://www.inside-r.org/r-doc/base/Quotes。 (...正则表达式也是如此。因此,在为模式提供字符参数时需要两个反斜杠。第一个反斜杠实际上不是字符,而是使第二个反斜杠成为字符。)您可以看到如何使用它们进行处理cat http://www.inside-r.org/r-doc/base/cat.

y <- "double quote: \", tab: \t, newline: \n, unicode point: \u20AC"
print(y)
## [1] "double quote: \", tab: \t, newline: \n, unicode point: €"
cat(y)
## double quote: ", tab:    , newline: 
## , unicode point: €

进一步阅读:在 R 中使用反斜杠转义反斜杠会在字符串中产生 2 个反斜杠,而不是 1 个 https://stackoverflow.com/questions/26284507/escaping-a-backslash-with-a-backslash-in-r-produces-2-backslashes-in-a-string-n

要在正则表达式中使用特殊字符,最简单的方法通常是使用反斜杠对其进行转义,但如上所述,反斜杠本身需要进行转义。

grepl("\\[", "a[b")
## [1] TRUE

要匹配反斜杠,您需要双重转义,从而产生四个反斜杠。

grepl("\\\\", c("a\\b", "a\nb"))
## [1]  TRUE FALSE

The rebus包包含每个特殊字符的常量,以防止您误输入斜杠。

library(rebus)
OPEN_BRACKET
## [1] "\\["
BACKSLASH
## [1] "\\\\"

更多示例请参见:

?SpecialCharacters

您的问题可以这样解决:

library(rebus)
grepl(OPEN_BRACKET, "a[b")

形成一个字符类

您还可以将特殊字符括在方括号中以形成字符类 http://www.regular-expressions.info/charclass.html.

grepl("[?]", "a?b")
## [1] TRUE

其中两个特殊字符在字符类中具有特殊含义:\ and ^.

即使反斜杠位于字符类内部,仍然需要转义。

grepl("[\\\\]", c("a\\b", "a\nb"))
## [1]  TRUE FALSE

仅当插入符号位于左方括号之后时才需要转义。

grepl("[ ^]", "a^b")  # matches spaces as well.
## [1] TRUE
grepl("[\\^]", "a^b") 
## [1] TRUE

rebus还可以让你形成一个角色类别。

char_class("?")
## <regex> [?]

使用预先存在的字符类

如果你想匹配所有标点符号,你可以使用[:punct:]字符类。

grepl("[[:punct:]]", c("//", "[", "(", "{", "?", "^", "$"))
## [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE

stringi将此映射到标点符号的 Unicode 通用类别,因此其行为略有不同。

stri_detect_regex(c("//", "[", "(", "{", "?", "^", "$"), "[[:punct:]]")
## [1]  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE

您还可以使用跨平台语法来访问 UGC。

stri_detect_regex(c("//", "[", "(", "{", "?", "^", "$"), "\\p{P}")
## [1]  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE

使用 \Q \E 转义

将字符放置在之间\\Q and \\E使正则表达式引擎按字面意思对待它们而不是作为正则表达式。

grepl("\\Q.\\E", "a.b")
## [1] TRUE

rebus允许您编写正则表达式的文字块。

literal(".")
## <regex> \Q.\E

不要使用正则表达式

正则表达式并不总是答案。如果你想匹配一个固定的字符串,那么你可以这样做,例如:

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

如何在正则表达式中处理 \^$.?*|+()[{ 等特殊字符? 的相关文章

  • ‘!’ 对于 R 中的因子没有意义

    我需要从数据框中排除变量 PABI 所以 我按如下方式进行子集化 MyData4 lt subset MyData PROV PABI newdata lt MyData MyData4 但我得到了这个错误 Error in FUN lef
  • PHP 电子邮件验证[重复]

    这个问题在这里已经有答案了 For PHP最好的电子邮件验证方法是什么preg NOT ereg因为它是已弃用 删除 I don t需要检查该网站是否存在 这不像最高安全性 我找到了很多方法ereg但它们 显然 不是好的做法 我建议你使用F
  • 闪亮的仪表板侧边栏中的可折叠菜单项

    我的侧边栏中有两个菜单项 目前 如果我单击任何菜单项 则会显示所有菜单项的选项卡项 我想让它可折叠 如果我单击多个名称菜单 单个分析应该折叠 如果我单击单个分析 多个分析应该折叠 目前的设计是 相同的可重现代码是 library shiny
  • 如何确保 re.findall() 停止在正确的位置?

    这是我的代码 a import re re findall r lt title gt lt title gt a 结果是 title aaa
  • do.call 的 envir 选项如何工作?

    的文档do call states If quote is FALSE 默认值 然后对参数进行求值 在调用环境中 而不是在envir 这句话向我暗示 当quote FALSE 指定envir没有什么区别 然而 事实并非如此 事实上我遇到过需
  • 匹配没有周围字符列表的单词列表

    我有这个正则表达式 one common word or another 除非这两个单词相邻 否则它匹配得很好 One one s more word word common word or another word more anothe
  • ggplot2以限制为中心的多边形世界地图给出了有趣的边缘

    使用下面的代码我生成了一张以华盛顿特区为中心的地图 解决方案基于科斯克的解决方案在这里 https stackoverflow com questions 10620862 use different center than the pri
  • 当我添加形状时,分组哑铃图变得不稳定

    我有以下数据显示白人与黑人在各个领域的一致性百分比 我想创建一个分组哑铃图 其中国家值和州值彼此相邻 以便于比较 Domain c A B C D E F G A B C D E F G A B C D E F G A B C D E F
  • 使用 alpha 通道叠加两个 ggplot2 stat_密度2d 图

    我想叠加两个ggplot2使用 alpha 通道进行绘图 结果图像显示两个数据集 这是我的测试数据 data read table text P1 1 0 4 nP2 0 0 2 nP3 2 1 8 nP4 2 2 6 nP5 0 5 2
  • 在 mutate pipeline 中按组获取唯一 ID [重复]

    这个问题在这里已经有答案了 自从新的 dplyr v1 0 0 更新发布以来 我注意到该功能group indices 有 已弃用 我在工作中经常使用这个功能 并且我喜欢在mutate 例如使用dplyr v0 8 3我能够非常轻松地做这样
  • 按值对 geom_bar ggplot2 中的条形重新排序

    我正在尝试制作一个条形图 其中的图是从miRNA与最高的value to the miRNA与最低的 为什么我的代码不起作用 gt head corr m miRNA variable value 1 mmu miR 532 3p pos
  • 使用带有字边界的 mgsub 函数作为替换值

    我试图用空格替换向量中字符串元素的子字符串 以下是我们正在考虑的向量 test lt c PALMA DE MALLORCA THE RICH AND THE POOR A CAMEL IN THE DESERT SANTANDER SL
  • 在 R 中将 ascii 数字转换为字符串

    要将 R 中的字符串转换为 ascii 代码 我通常使用 gt strtoi charToRaw abcd 16L 1 97 98 99 100 是否有一个函数可以做相反的事情 即 gt myDesiredFunc c 97 98 99 1
  • 在r中水平旋转直方图

    谁能帮我如何在 r 中将直方图旋转 90 度 我知道箱线图中有一个选项 horiz T 但我不知道直方图是否有类似的选项 我认为你必须使用 hist 和 barplot 来完成它 如下所示 直接来自文档 你可以在这里检查它 layout x
  • while 循环中 regex.exec() 赋值的更好解决方案

    这里有更好的解决方案吗 我尽量避免里面的作业while但仍然能够循环匹配并使用捕获的组 var match var CSS URL PATTERN url s s s s gm while match CSS URL PATTERN exe
  • Mongo 正则表达式用于“不匹配”或反向[重复]

    这个问题在这里已经有答案了 我的 mongo 文档都包含一个名为templateName 有一些包含该值的文档 a SystemDefaultTemplate b SystemDefaultTemplate c SystemDefaultT
  • sed 中的正则表达式用于在一条语句中进行多个替换

    我想清理一些输入并用可接受的输入替换几个字符 例如一个丹麦人 with aa 使用多个语句可以轻松完成此操作 例如 ae aa oe 但由于工具限制 我希望能够在单个正则表达式中完成此操作 我可以捕获所有相关案例 但我的替换不能按我想要的方
  • R 语言 NaN + NA 行为

    我有一个关于 R 中算术行为的问题 看下面这段代码 gt NaN NA 1 NaN gt gt gt NaN as integer NA gt NA 所以 我很困惑这两个添加给出了不同的结果 有谁知道这是否是真正想要的行为还是只是某种错误
  • R 计算股票的 beta(使用 PerformanceAnalytics CAPM.beta() 函数或 lm() 函数产生意外结果)

    我正在尝试使用 PerformanceAnalytics CAPM beta 函数量化 R 中股票的 beta 基准测试与 SPY 结果甚至与我在 Yahoo Google Finance 在线看到的值不接近 代码 require Perf
  • 在模块中使用shiny的renderUI

    这是我在 stackoverflow 上的第一个问题 我在闪亮 1 0 5 中遇到模块和 renderUI 的问题 当我在中使用 renderUI 时 Main Part ui lt bootstrapPage uiOutput Dynam

随机推荐

  • php自定义异常

    我想知道如何编写自定义异常处理程序 这样我就可以做类似的事情 throw new dbException sql message 并让它输出 您的查询有误 消息 消息 查询 sql 这里 行 行异常被抛出 文件 抛出文件异常 但我也想捕获例
  • 如何在您的应用程序中获取 Elastic Beanstalk 应用程序版本?

    我们希望能够在 PHP 代码中检索 elastic beanstalk 应用程序版本 我没有看到 EB 在任何服务器配置文件中将其传递给我们 我觉得这很奇怪 还有其他人知道我们如何才能得到这个吗 至少对于 Docker 容器 您可以使用存储
  • Python:在 CSV 中得到 \xa0 而不是空格,无法删除或转换

    我有一个与 python 中的编码问题相关的问题 IPython笔记本 由于此类问题非常常见且简单 但我仍然无法真正解决它 我有一个CSV http www montefiore ulg ac be glouppe 2012 2013 ch
  • Sails js - 创建资产的副本

    我们正在考虑将我们的项目移植到 Sails js 我们的静态资产非常大 超过 3 GB 因此 这造成了严重的限制 因为它使我们的应用程序的大小增加了一倍 我们可以修改 Sails js 以防止这种默认行为吗 或者有人可以推荐其他框架吗 Sa
  • 使用 pry 时立即在 Rails 控制台中同时评估多行代码?

    假设我们有pry安装好后 打开rails控制台 然后运行 times 1 5 10 30 72 sample 1 0 nums 1 72 num sample nums sample times 计算在第 2 行之后停止 因为第二行的输出超
  • 如何让Android系统对所有apk强制使用LANDSCAPE?

    为了实现这一点 我在android系统 v4 04 中进行了三种修改 它们是 1 WindowsManagerService java 修改了getOrientationFromWindowsLocked 2 Activity java 修
  • Angular2 rxjs - switchmap 捕获错误

    我希望能够处理调用时出错的任何错误this authService refreshToken 可以在 switchmap 块内处理错误吗 或者在这种情况下我该如何处理错误 post3 endpoint string body string
  • Android 中的“-journal”SQLite 数据库是什么?

    在我的andoid应用程序的数据库目录 data data com me myApp databases 中 对于我创建的每个sqlite数据库 都有一个同名的相应数据库 名称后附加 journal 例如 myDatabase myData
  • 在 web.config 中设置多个 SMTP 设置?

    我正在构建一个应用程序 需要在发送电子邮件时动态 编程地了解并使用不同的 SMTP 设置 我习惯使用 system net mailSettings 方法 但据我了解 这种方法一次只允许一个 SMTP 连接定义 由 SmtpClient 使
  • 灵活或居中页面 HTML CSS

    我必须使用灵活或居中的页面设计 即使用户屏幕分辨率为 800 600 也能正常工作 当我缩小页面时 元素会移动并改变它们的位置 灵活页面或居中页面正常吗 如果不是应该怎样 页面的 CSS 代码 body margin left auto m
  • 以编程方式为 ViewController 创建选项卡栏

    我一直在考虑以编程方式向我的视图控制器添加一个选项卡栏 因为有一个滚动视图 如果它不在我的视图中间 我就无法将其放置在上面 我对如何添加它有点困惑 是否需要在我的ViewDidLoad方法或我的AppDelegate 如果我有 UITabB
  • 如何从包含为 jar 的不同项目模块 @Inject 对象

    我在多模块 Maven 项目中使用 Vaadin CDI 其中包含一个通用类 如接口 抽象类等 所需的模块 我的问题是 我无法 Inject带注释的类 UIScoped像往常一样 它被放置在core模块到另一个 我还在得到不满意解决异常 S
  • 所有可能的词

    我想使用 a z 创建所有可能的 5 个字母单词 请建议任何好的且快速的算法 我尝试过创建一个 它看起来像这样 byte allchar new byte a b c d e f g h i j k l m n o p q r s t u
  • 如何在 iPad 版 Safari 中使用 jQuery 识别触摸事件?是否可以?

    是否可以使用 jQuery 识别 iPad Safari 浏览器上的触摸事件 我在 Web 应用程序中使用了 mouseOver 和 mouseOut 事件 由于没有 mouseOut 和 mouseMove 等事件 iPad 的 Safa
  • Django 无法从 django.contrib.auth.views 导入登录信息

    我尝试为我的页面构建登录功能 要按如下方式编辑 urls py 它会不断打印 无法从 django contrib auth views 导入名称 login 我该如何处理这个问题 from django contrib auth view
  • C++:0.和0.0之间的区别?

    我很清楚之间的区别0 and 0 0 整数和双精度 但这之间有什么区别吗0 and 0 0 请注意 预先非常感谢 Axel 没有区别 两个文字都是双精度的 来自 C 语法 fractional constant digit sequence
  • 使用 JavaScript 动态伪元素 CSS

    是否可以动态设置伪元素的CSS 例如 jQuery 动态样式帮助容器 help css width windowWidth xOffset height windowHeight yOffset bottom windowHeight le
  • LINQ - 对特定类型的类进行分组

    这个问题类似于LINQ 将一种类型的项目分组 https stackoverflow com questions 2835192 linq group one type of item但以更通用的方式处理 我有一个包含各种派生类的列表 我可
  • 使用 Flask 为使用 create-react-app 创建的前端提供服务

    我有一个带有 API 路由的 Flask 后端 由使用 create react app 创建的 React 单页应用程序访问 当使用 create react app 开发服务器时 我的 Flask 后端可以工作 我想为构建的服务 使用n
  • 如何在正则表达式中处理 \^$.?*|+()[{ 等特殊字符?

    我想匹配一个正则表达式特殊字符 http www regular expressions info characters html 我试过 x lt a b grepl x Error invalid regular expression