【问题标题】:How to extract text between quotes with regex in ruby如何在ruby中使用正则表达式提取引号之间的文本
【发布时间】:2014-10-10 06:56:11
【问题描述】:

我有以下字符串,我想提取单引号之间的文本。

javascriptfunction('marie d\'avignon','-','','3')

对我来说问题是转义单引号(可能多次出现转义字符),所以匹配应该是

marie d\'avignon
-
3

感谢您的帮助

【问题讨论】:

  • 所以你想打印包含转义单引号的单引号内的字符串?
  • 对,转义的引号应该包含在提取的字符串中
  • 它是否包含多个转义引号?请更新您的问题以提供更多详细信息..
  • javascriptfunction('marie d\'avignon','-','','3', 'foo\'bar\'') 输入的输出是什么?
  • 是用javascript还是ruby运行?

标签: ruby regex


【解决方案1】:

你可以试试下面的正则表达式,

(?<=')(?:[^']*\\')+[^']*(?=')

DEMO

(?:[^']*\\')+ regex 确保引用的字符串中必须存在转义的引号。

【讨论】:

  • 很好,但是其他两个字符串的匹配项呢?在上面的例子中 '-', '', '3' ?您刚刚匹配第一组的正则表达式?
  • 你说你只想要包含转义引号的字符串。
  • 抱歉,我更新了问题。感谢您的帮助
  • 为什么你不想要空字符串?
  • @dc10 见这里rubular.com/r/ZK593J0EiX。从组索引 1 中获取值。
【解决方案2】:

最简单的可能是:

str = "javascriptfunction('marie d\\'avignon','-','','3')"
#=> "javascriptfunction('marie d\\'avignon','-','','3')"
str[/'.*?(?<!\\)'/]
#=> "'marie d\\'avignon'"
str.scan /'(.*?(?<!\\))'/
#=> [["marie d\\'avignon"], ["-"], [""], ["3"]]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-11
    • 1970-01-01
    • 2012-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多