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

时间:2017-06-15 19:20:00

标签: python regex string

我目前正在编写自己的语言,并且有一些不同类型的字符串文字,它们使用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"']

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

3 个答案:

答案 0 :(得分:2)

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

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

每个报价的一个替代方案。

demo

答案 1 :(得分:1)

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

([\"'`])

请参阅Python demo

<强>详情:

  • (.*?) - 第1组匹配双引号,单引号或反引号
  • \1 - 第2组捕获任何0+字符,尽可能少,直到第一次出现
  • \1 - 与第1组中保留的值相同(var arrayOfFriends = Artist[0].friends.split(", "); // arrayOfFriends = ['James', 'Harry', 'Bob'] 是对第1组值的反向引用)。

答案 2 :(得分:-1)

建立在Wiktor Stribiżew的基础上,它可以处理多行和转义引号:

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

我已经测试并正在Javascript中使用它,但是它可以在Python中按原样工作:

Python Demo