【问题标题】:select quotes but NOT apostrophes in REGEX在 REGEX 中选择引号但不选择撇号
【发布时间】:2016-03-31 19:08:37
【问题描述】:

我想实现这个惊人的结果(我正在使用 Ruby):

input:  "Joe can't tell between 'large' and large."   
output: "Joe can't tell between large and large."

去掉引号但不去掉撇号
我怎样才能以简单的方式做到这一点?

我失败的过于复杂的尝试:

 entry = test[0].gsub(/[[']*1]/, "")

【问题讨论】:

标签: ruby regex quotes apostrophe


【解决方案1】:

根据您的情况,最简单的可能是这样的。

正则表达式: /\s'|'\s/ 并替换为 space

Regex101 Demo


您也可以使用/(['"])([A-Za-z]+)\1/ 并替换为\2,即第二个捕获组。

Regex101 Demo

【讨论】:

  • 为了安全起见,也可以与\b 一起使用,捕获'test',thing 之类的内容。
【解决方案2】:

这是一个演示答案的脚本:

x = "Joe can't tell between 'large' and large."
puts x.gsub(/'\s|\s'/, " ")
# Output: Joe can't tell between large and large.

解码此脚本的作用 - gsub / regex 行在说:

查找所有(一个撇号,后跟一个空格 '/s)或(一个空格 后跟撇号 \s') 并将其替换为空格。

这会使不与空格相邻的撇号保持不变,这似乎只删除了 OP 试图删除的撇号。

【讨论】:

    【解决方案3】:

    也许是这个?

    entry = test[0].gsub(/[^']/, "")
    

    但它应该删除 all '

    【讨论】:

      【解决方案4】:

      这完全符合您的要求,包括忽略已发布的 cmets Students' 示例。

      entry = test[0].gsub(/'(­[^\s]+)'/,­ '\1')

      我没有设置 ruby​​,但我在这里确认了它的工作原理:http://tryruby.org/levels/1/challenges/0

      这是一个关于 regex101 的示例:

      https://regex101.com/r/aY8aJ3/1

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-23
        • 2020-05-20
        • 1970-01-01
        • 2016-09-27
        • 2015-05-03
        相关资源
        最近更新 更多