繁体   English   中英

正则表达式匹配字符串文字

[英]Regex to match string literal

我目前正在编写自己的语言,并且有一些不同类型的字符串文字,它们使用3个不同的符号来表示它们。 他们在下面。

1) "Hello"是一个简单的字符串文字,编译为Hello

2) 'Hello'是一个访问字符串压缩函数的压缩字符串。 (这会返回乱码)

3) `Hello`返回从每个字符代码点构造的数字

我正在尝试使用正则表达式匹配一段代码

`Hel"lo` 2* "Hel`lo"

但是不能提出只在第一个和最后一个字符相同时才匹配的那个。 我现在有

[`'\"]([\s\S]+|[^`'\"]+)['`\"]

但这不会产生我想要的结果。

该示例的预期结果应该是

['`Hel"lo`', ' ', '2', '*', ' ', '"Hel`lo"']

但我的正则表达式回归

['`Hel"lo` 2* "Hel`lo"']

万一你无法猜测,我对正则表达式缺乏经验,所以我很感激任何帮助。

如果您只想获取第一个分隔符和最近的相同尾随分隔符之间的内容,您可以使用

import re
s = """`Hel"lo` 2* "Hel`lo\""""
print([x.group(2) for x in re.finditer(r"([\"'`])(.*?)\1", s)])

请参阅Python演示

细节

  • ([\\"'`]) - 组1匹配双引号,单引号或反引号
  • (.*?) - 第2组捕获任何0+字符,尽可能少,直到第一次出现
  • \\1 - 与组1中保存的值相同( \\1是对组1值的反向引用)。

使用捕获组不是必需的,您可以简单地编写您的模式:

`[^`]*`|"[^"]*"|'[^']*'|\w+|\s+|[^`"'\s\w]

每个报价一个替代方案

演示

WiktorStribiżew的基础上,它处理多行和转义引号:

([\"'`])(?:[\s\S])*?(?:(?<!\\)\1)

我测试并在Javascript中使用它,但它在Python中工作原样:

Python演示

Javascript演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM