[英]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值的反向引用)。 在WiktorStribiżew的基础上,它处理多行和转义引号:
([\"'`])(?:[\s\S])*?(?:(?<!\\)\1)
我测试并在Javascript中使用它,但它在Python中工作原样:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.