Regex 用于提取引号中字符串的正则表达式(在某些要求下)

Regex 用于提取引号中字符串的正则表达式(在某些要求下),regex,Regex,也许这些问题看起来有些奇怪,但目前我在从引号中提取字符串时遇到了一个真正的问题,但要满足某些条件。这些是 只提取引号中的文本,而不提取引号本身 e、 我住在“德国”->德国 如果没有引号,则应完整返回文本 e、 我住在德国->我住在德国 如果引号受\保护,则应将其视为普通字符并提取,但不带反斜杠 e、 我住在“德国”->我住在“德国” 如果缺少最后一个引号,则应返回文本的其余部分 e、 g.I“生活在德国->生活在德国 我所有的实验都失败了。我最好的猜测是: (?<=(?<

也许这些问题看起来有些奇怪,但目前我在从引号中提取字符串时遇到了一个真正的问题,但要满足某些条件。这些是

  • 只提取引号中的文本,而不提取引号本身
    e、 我住在“德国”->德国
  • 如果没有引号,则应完整返回文本
    e、 我住在德国->我住在德国
  • 如果引号受\保护,则应将其视为普通字符并提取,但不带反斜杠
    e、 我住在“德国”->我住在“德国”
  • 如果缺少最后一个引号,则应返回文本的其余部分
    e、 g.I“生活在德国->生活在德国
我所有的实验都失败了。我最好的猜测是:

    (?<=(?<!\\)").*?(?=(?<!\\)")
(?
问题是,如果根本没有引号,则提取的字符串为空

非常感谢您的帮助
致以最诚挚的问候

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

^([^"\n\\]*)(?:\\(")|"|)([^"\n\\]*)(?:\\(")|"|)(.*)$
您需要连接组#1、2、3、4、5以获取捕获的字符串


现场演示:为什么有必要将所有这些逻辑压缩到一个正则表达式中?有很多工具更适合于此。我想到了由编程语言支持的多个正则表达式,字符串操作也是如此。您使用的是什么语言?高级工具对于如此复杂的情况可能会有很大帮助。我使用LabView,这也是我要做的它只需要一个regexp->性能原因。它们的regexp方法基于PCRE,因此完全兼容正则表达式可能的大多数描述操作。当然,可以对所有文本进行子串,但在解析XML请求和HTTP消息时复制字符串的性能不高。这也是一个要求t;)@user2273693那么您测试的字符串是
我住在“德国”
,或者字符串中还有其他句子吗?一个基于HTTP头的更实际的例子:
头:xxxyyzzz
SOAPAction:
其他头:aaabbbccc
带有子字符串I cut'SOAPAction:“myRequest”“'现在我想提取'myRequest'
引号不是必需的
“SOAPAction:myRequest”也是有效的,不过我想提取“myRequest”不是一个坏的解决方案,非常感谢……但在以下情况下,它会产生问题,因为您必须检查组:我查看了您的链接,在所有情况下,此正则表达式都工作正常。正如我所说,您需要组合
组#1、2、3、4、5
以获得最终字符串。很抱歉,我没有正确注释它。如果在我的示例中使用匹配2和匹配4,并将组#{1-5}组合在一起,则可以再次使用原始字符串(没有空格和引号)。这意味着在连接之前,您必须检查组
是否(#1&&)打印(#1..5)其他concat(#1..5)
,根据您的问题,如果双引号带转义出现,则需要删除它们。对于案例2,您的最后一个字符串应该是:
hallo Holland
,对于案例4,您的最后一个字符串应该是:
我住在德国
。因此,你可以看到,对于所有的案例,你可以只做
concat(#1..5)
对于案例2,它应该是
Holland
,对于案例4,它应该是
在德国生活
。见上文项目符号1和4下的相关定义。不过,还是要谢谢你。从你的方法开始,我希望找到一个合适的解决方案,这已经是一个很好的建议