0

也许这些问题看起来很棘手,但目前我在从引号中提取字符串时遇到了一个真正的问题,但要满足某些标准。这些是

  • 应该只提取引号中的文本,而不是引号本身,
    例如我住在“德国”-> 德国
  • 如果没有引号,则应完全返回文本,
    例如我住在德国 -> 我住在德国
  • 如果引号受 \ 保护,它们应该被视为普通字符并被提取,但没有反斜杠,
    例如我住在 \"Germany\" -> 我住在 "Germany"
  • 如果缺少最后一个引号,则应返回其余文本,
    例如 I "live in Germany -> live in Germany

我所有的实验都失败了。我的最佳猜测是:

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

它的问题是,如果根本没有引号,则提取的字符串为空。

非常感谢您的帮助
最好的问候

4

1 回答 1

1

对于在您的问题中编写的测试用例,以下正则表达式应该适合您:

^([^"\n\\]*)(?:\\(")|"|)([^"\n\\]*)(?:\\(")|"|)(.*)$

您需要连接组 #1、2、3、4、5 以获取捕获的字符串。

现场演示:http ://www.rubular.com/r/u6m08cRo1v

于 2013-04-12T10:22:56.977 回答