【问题标题】:Regexp for splitting strings does not work as expected WHEN treating special characters处理特殊字符时,用于拆分字符串的正则表达式无法按预期工作
【发布时间】:2018-02-17 11:48:09
【问题描述】:

我有一个正则表达式用逗号分割字符串,忽略单引号或双引号之间的逗号,给出以下 Ruby 代码:

def separate params
  params.split(?!\B('|")[^\"']*),(?![^\"']*('|")\B)
end

它确实按预期工作,但具有特殊字符(如 @# 的字符串除外)

预期行为示例:

https://regex101.com/r/xB7rQ7/156

"\"search\", placeholder: \"Busca rápida: 1.4 8V, Flex, automático...\", id: \"search_terms\" "

意外行为示例:

https://regex101.com/r/xB7rQ7/157

"\"search\", placeholder: \"Busca rápida: 1.4 8V, Flex, automático...\", id: \"#search_terms\" "

请注意,唯一的区别是“search_terms”之前的# 符号,但正则表达式仅在第一种情况下将placeholderid 分开。

任何人都可以对我的正则表达式有所了解,以便它在两种情况下都能按预期工作吗?请注意,这是关于其他问题未涵盖的字符串拆分的特定情况。

【问题讨论】:

  • 哇,你不会放弃吧?你现在是第 157 版哈哈
  • 您能发布示例字符串及其预期输出吗?
  • 实际上,检查链接,他们有正在测试的字符串
  • @ErvalhouS 但您有 157 个修订版,您能否给我们一个示例数据集以使用预期输出进行测试?

标签: ruby regex split


【解决方案1】:

试试这个正则表达式:

,(?=(?:(?:[^"']*["']){2})*[^"']*$)

Click for Demo

说明:

  • , - 匹配 ,
  • (?=(?:(?:[^"']*["']){2})*[^"']*$) - 正向前瞻验证上面的 , 匹配必须后跟偶数个 "'
    • (?:(?:[^"']*["']){2})* - 匹配 0+ 次出现的任何既不是 " 也不是 ' 后跟 "' 的字符。最后的量词{2} 重复这个子序列2 次。最后的量词* 将整个子序列重复偶数次(即,0 或 2 或 4 或 6...出现)。 如果"'同时出现在字符串中,这个子序列可能会有一些不足
    • [^"']*$ - 在找到偶数次出现后,在行尾之前不应出现 "'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-13
    • 1970-01-01
    • 2010-10-16
    相关资源
    最近更新 更多