如何使用正则表达式匹配不在两个特殊字符之间的内容?

2024-01-01

我有一个像这样的字符串:

a b c a b " a b " b a " a "

我如何匹配每一个a不是由以下分隔的字符串的一部分"?我想匹配这里粗体的所有内容:

a bc a乙“乙”乙a " a "

我想替换这些匹配项(或者通过用空字符串替换它们来删除它们),因此删除匹配的带引号的部分将不起作用,因为我希望它们保留在字符串中。我正在使用红宝石。


假设引号正确平衡并且没有转义引号,那么很简单:

result = subject.gsub(/a(?=(?:[^"]*"[^"]*")*[^"]*\Z)/, '')

这取代了所有as 为空字符串当且仅当匹配项前面有偶数个引号a.

解释:

a        # Match a
(?=      # only if it's followed by...
 (?:     # ...the following:
  [^"]*" #  any number of non-quotes, followed by one quote
  [^"]*" #  the same again, ensuring an even number
 )*      # any number of times (0, 2, 4 etc. quotes)
 [^"]*   # followed by only non-quotes until
 \Z      # the end of the string.
)        # End of lookahead assertion

如果您可以在引号内转义引号 (a "length: 2\""),这仍然是可能的,但会更复杂:

result = subject.gsub(/a(?=(?:(?:\\.|[^"\\])*"(?:\\.|[^"\\])*")*(?:\\.|[^"\\])*\Z)/, '')

这本质上与上面的正则表达式相同,只是替换(?:\\.|[^"\\]) for [^"]:

(?:     # Match either...
 \\.    # an escaped character
|       # or
 [^"\\] # any character except backslash or quote
)       # End of alternation
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用正则表达式匹配不在两个特殊字符之间的内容? 的相关文章

随机推荐

  • 更改 PostgreSQL 数据库及其表的所有者的最佳方法?

    我正在尝试更改 PostgreSQL 数据库 版本 gt 8 2 及其表的所有者 我读过这个解决方案 在 PostgreSQL 中同时修改所有表的 OWNER https stackoverflow com questions 134812
  • gStreamer 视频录制内存泄漏

    您好 我正在尝试录制来自摄像机的 rtsp 流 H264 格式 我正在使用以下 gst 命令以 MPEG4 格式进行录制 gst launch e rtspsrc location rtsp 10 17 8 136 mediainput h
  • Pyrocms 模块或小部件或插件

    这让我抓狂 我想在网站主页上包含一个简单的联系表格 我无法确定是否需要构建模块 小部件或插件 他们似乎都不太正确 模块似乎只能作为独立页面工作 例如现有的联系人模块 小部件似乎只显示数据 从数据库或某种提要 例如 Twitter 获取 而插
  • Ajax 并返回由 PHP GD 创建的图像

    我有一个 PHP 脚本 可以使用 PHP GD 生成图像 生成图像后 将其保存 并在 Ajax 调用时发送以下输出 imagejpeg img data filename jpg echo img src filename jpg jpg
  • 如何对 PHP 应用程序进行负载平衡?

    我正在寻找有关如何对 php 应用程序进行负载平衡的指南 建议或示例 我的设置是 Ubuntu 10 04 和 PHP 5 3 我以前从未使用过负载平衡服务器 我正在寻找提供的任何帮助 Update 这是一个 Web 应用程序 预计将有数百
  • 如何使用 NodeJS imagemagick 库将 PDF 的第一页转换为 JPG?

    我正在尝试将 pdf 文件转换为预览图标 jpg 使用 NodeJS 的 imagemagick 库 我在尝试着 仅生成预览第一页 适用于多页 pdf 在普通的命令行 imagemagick 程序中 这可以是 很容易通过说 转换文件 pdf
  • java正则表达式键:值多行

    我有这样的文字 33 88 app 2 8 superman taman 蒲种 36100 马来西亚 22 布拉布拉 布拉 布拉布拉布拉 32 45 dsfd qdsfqsdf 72D Example 这个例子有一个形式 核心价值 值可以是
  • 从分组数据中选择两个随机且连续的行

    在下面的数据中 包括dput 我对三个人 IndIDII 进行了重复观察 纬度和经度 请注意 每个人都有不同数量的位置 并且它们是按以下顺序排列的 IndYear IndIDII IndYear WintLat WintLong 1 BHS
  • 一次将多个商品添加到 WooCommerce 购物车

    我有 3 个不同商品的 ID 我想将它们添加到购物车中 我可以用https url com shop cart add to cart 3001但是当我想添加 3 个项目时我却做不到 我可以添加任何功能 脚本来将此功能添加到我的购物网站吗
  • python中物理量的命名

    我想为我的模拟代码中使用的物理 数学量建立一个良好的命名方案 考虑以下示例 from math import class GaussianBeamIntensity object Optical intensity profile of a
  • 哪里可以获得适用于 Windows 的预编译 GTK3? [复制]

    这个问题在这里已经有答案了 有没有地方可以下载 Windows 版预编译的 GTK3 GTK 站点仅提供 2 22 版本的二进制文件 GTK for Windows 是由志愿者生成的 因此发布日期不同步 并且取决于开发人员的可用性 一旦完成
  • 寻找一种使用 Shapely 快速查找点所属多边形的方法

    我有一组约 36 000 个多边形 代表该国家 地区的一个分区 约县 我的 python 脚本接收很多点 pointId 经度 纬度 对于每个点 我想发回 pointId polygonId 对于每个点 循环到所有多边形并使用 myPoin
  • CSS 可以根据语言选择不同的默认字体和大小吗

    我有以下 CSS 片段 INPUT font family Raavi font size 14px 当文本框包含一些旁遮普文字时 效果很好 如下所示 但用户可能会输入英文 而我宁愿使用不同大小的 Verdana 字体 因为 Raavi 字
  • android:使用单个媒体播放器对象播放音频文件并显示图像

    我需要依次显示图像并播放相应的音频文件 我尝试创建多个媒体播放器对象 但它显示error 1 17 所以请帮助大家 我的时间不多了 现在我有一个处理程序 它播放音频文件 然后在播放另一个音频文件时获取该音频文件的持续时间 这是我的方法 但我
  • D3.js 中的树形图 x 和 y 属性从何而来?

    这是 JavaScript 代码 d3 json city json function error root var nodes cluster nodes root var links cluster links nodes consol
  • UITableView 单元格上的 Peek 和 Pop 因 UISearchController 而失败

    Peek and Pop 正在与UISearchController 但是 一旦您开始使用以下命令搜索表 Peek 和 Pop 就会停止工作updateSearchResults I ve extended Apple s Table Se
  • 从“local hackage”安装软件包(通过 cabal)

    是否有可能让阴谋集团 下载特定的包源 包括所有依赖包源 在稍后阶段 当不再依赖互联网连接时 通过 cabal 从本地下载的文件中自动按正确的顺序安装这些软件包 以便构建所需的软件包 我知道你可以使用cabal unpack查看特定包的源代码
  • IBM Worklight 6.1 开发者版下载链接

    我正在尝试从市场或谷歌下载 IBM Worklight 6 1 但我看不到任何相同的结果 任何人都可以分享 IBM WL 6 1 的链接以及如何将修复包升级到 6 1 0 1 我也在寻找开发者版本 由于 6 2 已发布 我只能看到 6 2
  • Altair 结合多个数据集

    我最近才知道Vega Vega Lite and Altair并将其视为最佳 Python 绘图工具的真正竞争者 我目前正在努力解决的问题是将两个数据帧中的信息绘制到共享一个或两个轴的同一个图表中 我尝试过类似的事情 plot1 alt C
  • 如何使用正则表达式匹配不在两个特殊字符之间的内容?

    我有一个像这样的字符串 a b c a b a b b a a 我如何匹配每一个a不是由以下分隔的字符串的一部分 我想匹配这里粗体的所有内容 a bc a乙 乙 乙a a 我想替换这些匹配项 或者通过用空字符串替换它们来删除它们 因此删除匹