首页 > 解决方案 > 用于修复 YAML 字符串的正则表达式

问题描述

我正在尝试创建一堆 YAML 文件,主要由文本字符串组成。现在,当在单词中使用撇号时,必须通过键入双撇号对其进行转义,因为我使用撇号来包装字符串。

我想创建一个正则表达式来检查文本中不是双引号的撇号。我所拥有的是:

^([^'\n]*?)'(([^'\n]*?)'(?!')([^'\n]+?))*?'$\n

https://regex101.com/r/v4nUTn/3

我的问题是,只要我的字符串有一个双撇号,但也有一个不是双撇号的撇号,它就不匹配,因为我的负前瞻在看到双撇号时就不匹配。(例如,t''e'st即使在 之后缺少双撇号,字符串也不会匹配e

我怎样才能做到这一点,以便我的负前瞻在看到一个双撇号时不会失败?

标签: regexyaml

解决方案


一个建议是分两步进行。

例如,如果每个 'candidate' 值看起来像这样:(- 'something here'如果您想测试something here字符串内容中的撇号,则首先通过以下方式隔离该内容:

/^\s*- '(.+)'$/im

然后确保所有撇号都按照您希望它们出现在结果的匹配组 1 中的方式出现。

然后,用您的“净化”匹配替换原始匹配。

这样做意味着您不必担心边界撇号会导致检查值中的撇号变得复杂。

注意:很可能有一个完美的一步式正则表达式来执行此操作,但是如果您花费大量时间使用正则表达式,了解您可以将任务分成几个步骤很有用,并且可以帮助您避免“完美的正则表达式瘫痪”。


推荐阅读