Regex parse YAML的正则表达式

Regex parse YAML的正则表达式,regex,yaml,Regex,Yaml,我有许多用YAML文件组织的翻译文件。例如: 每个月:Kas mėnesį 银行账户编号:A/s “内部服务器错误”:“Vidinėserverio klaida” 下一个锁:“Kitas užrakinimas” 两天后00:00:两天后00:00 同一天00:00:“Tąpaąia dieną00:00” “系列%number%”:“系列:编号%number%” 不允许在重置日期前编辑记录:“Neleidžiama kurtiįrašanksčiau archyvo datos:%date%

我有许多用YAML文件组织的翻译文件。例如:

每个月:Kas mėnesį
银行账户编号:A/s
“内部服务器错误”:“Vidinėserverio klaida”
下一个锁:“Kitas užrakinimas”
两天后00:00:两天后00:00
同一天00:00:“Tąpaąia dieną00:00”
“系列%number%”:“系列:编号%number%”
不允许在重置日期前编辑记录:“Neleidžiama kurtiįrašanksčiau archyvo datos:%date%”
升级后,我的框架要求我在所有翻译消息中添加引号。用手来做这件事将是一项非常漫长而复杂的任务。我已经试着为这个
(.*):[\s]{0,2}([^']{0,1}[\%]?[\w\d]+[\%]?[\/,\-\.\(\)\%\\\\\\\\uh\p{L}]+
编写下一个正则表达式,它有一个小错误,它还匹配如下行:

“系列%number%”:“系列:编号%number%”
不允许在重置日期前编辑记录:“Neleidžiama kurtiįrašanksčiau archyvo datos:%date%”
但我只想匹配不带引号的行:

每个月:Kas mėnesį
银行账户编号:A/s
两天后00:00:两天后00:00

这是一个在线正则表达式编辑器,我试图在其中实现,您可以在最后一个字符类中添加匹配的a
和数字
\d
,在冒号后匹配1-2个空格字符,并使用锚定符
^
$

^(.*?):\s{1,2}(%?\w+%?[\/,.()_\h\p{L}:\d-]+)$

关于你尝试的模式

  • [\%]?
    可以写成
    %?
  • \w
    也与
    \d
    匹配,因此此
    [\w\d]+
    可以写成
    \w+
  • 如果值应在%之间或两者都不在,则可以将
    %?\w+%?
    写入
    (?:%\w+%\w+
  • 它取决于分隔符,但您不必转义
    \/

如果要匹配除第一个可选字符
%
之前的
'
以外的任何字符:

^(.*?):\s{1,2}([^'"]?%?\w+%?[\/,.()_\h\p{L}:\d-]+)$

你是说像这样吗<代码>^(.*):(?:%\w+%\w+%\w+[\/,\-。(?:%\h\p{L}:\d]+)$
@第四只鸟,是的,这正是我需要的。谢谢,我知道了,我的正则表达式也能工作,但我忘了锚定
^
$
。无论如何,非常感谢。