regex - 用于修复 YAML 字符串的正则表达式
问题描述
我正在尝试创建一堆 YAML 文件,主要由文本字符串组成。现在,当在单词中使用撇号时,必须通过键入双撇号对其进行转义,因为我使用撇号来包装字符串。
我想创建一个正则表达式来检查文本中不是双引号的撇号。我所拥有的是:
^([^'\n]*?)'(([^'\n]*?)'(?!')([^'\n]+?))*?'$\n
https://regex101.com/r/v4nUTn/3
我的问题是,只要我的字符串有一个双撇号,但也有一个不是双撇号的撇号,它就不匹配,因为我的负前瞻在看到双撇号时就不匹配。(例如,t''e'st
即使在 之后缺少双撇号,字符串也不会匹配e
)
我怎样才能做到这一点,以便我的负前瞻在看到一个双撇号时不会失败?
解决方案
一个建议是分两步进行。
例如,如果每个 'candidate' 值看起来像这样:(- 'something here'
如果您想测试something here
字符串内容中的撇号,则首先通过以下方式隔离该内容:
/^\s*- '(.+)'$/im
然后确保所有撇号都按照您希望它们出现在结果的匹配组 1 中的方式出现。
然后,用您的“净化”匹配替换原始匹配。
这样做意味着您不必担心边界撇号会导致检查值中的撇号变得复杂。
注意:很可能有一个完美的一步式正则表达式来执行此操作,但是如果您花费大量时间使用正则表达式,了解您可以将任务分成几个步骤很有用,并且可以帮助您避免“完美的正则表达式瘫痪”。
推荐阅读
- reactjs - How to pass style in svg tag in React?
- swift - 如何在不使用 do .count 的情况下从结果中一一获取对象
- asp.net-core-2.1 - 会话状态在 asp.net core 2.1 api 项目中不起作用
- jquery - 如何添加jquery进度条的更改颜色
- typo3 - 如何通过 TCA 覆盖扩展 TYPO3 的常用内容元素与 FlexForm?
- html - 如何使用 :checked 选择器选择元素
- asp.net-mvc - 根据数据库值检查单选按钮
- asp.net-core - 在 ASP.Net Core 中注入服务、业务逻辑类和记录器
- python - OpenCV 无法读取烧瓶应用程序中的文件
- node.js - Mongodb更新推送对象数组