使用正则表达式从字符串中解析另一个字符串

-1 投票
4 回答
651 浏览
提问于 2025-04-19 01:01

我需要一个正则表达式,用来从一个字符串中提取信息。

为了让你明白我的意思,想象一下下面的内容是需要解析的字符串:

"a string" ... \\"another \"string\"\\" ... "yet another \"string" ... "failed string\" 

这里的“...”表示一些任意的数据。

这个正则表达式需要返回一个列表:

["a string", "another \"string\"\\", "yet another \"string"] 

补充说明:注意字面上的反斜杠不会影响第二次匹配

我试过使用finditer,但它找不到重叠的匹配项,我也试过使用前瞻(?=),但也没有成功。

有人能帮忙吗?

4 个回答

0
("[^...]*?")(?=\s*\.\.\.|$)

你可以试试这个。

看看演示。它能正确地给出你需要的答案。

http://regex101.com/r/bJ6rZ5/4

0

这里有一种方法可以模拟一个原子组 (这对于减少当模式必须失败时的回溯非常有用)

re.findall(r'"(?=((?:[^"\\]+|\\.)*))\1"', s)

演示链接

0

你可以使用这个正则表达式:

"[\w\s\\"]+(?<!\\)"

这是一个有效的示例

在这里输入图片描述

编辑:我注意到你更新了你的输入示例。对于更新后的输入,你可以使用这个正则表达式:

(?:\\\\"|")[\w\s\\"]+(?:\\\\"|(?<!\\)")

这是一个有效的示例

在这里输入图片描述

1

你可以试试下面这个正则表达式,它可以匹配那些以"开头的字符串(前面没有\符号),一直匹配到下一个"符号,且这个"前面也没有\

(?<!\\)".*?(?<!\\)"

示例

>>> s = r'"a string" ... "another \"string\"" ... "yet another \"string" ... "failed string\"'
>>> m = re.findall(r'".*?[^\\]"', s)
>>> m
['"a string"', '"another \\"string\\""', '"yet another \\"string"']
>>> m = re.findall(r'".*?(?<!\\)"', s)
>>> m
['"a string"', '"another \\"string\\""', '"yet another \\"string"']
>>> m = re.findall(r'(?<!\\)".*?(?<!\\)"', s)
>>> m
['"a string"', '"another \\"string\\""', '"yet another \\"string"']

更新:

>>> s = r'"a string" ... \\"another \"string\"\\" ... "yet another \"string" ... "failed string\" '
>>> m = re.findall(r'(?<!\\)".*?(?<!\\)"|(?<=\\\\)".*?\\\\"', s)
>>> m
['"a string"', '"another \\"string\\"\\\\"', '"yet another \\"string"']
>>> for i in m:
...     print i
... 
"a string"
"another \"string\"\\"
"yet another \"string"

示例

撰写回答