【问题标题】:regex to remove everything after the last comma in a string正则表达式删除字符串中最后一个逗号之后的所有内容
【发布时间】:2018-06-01 23:10:26
【问题描述】:

我想在 Perl 中编写一个正则表达式,它将删除字符串中最后一个逗号之后的所有内容。我知道最后一个逗号后面的子字符串是数字或其他子字符串,所以那里没有逗号。

例如:some\string,/doesnt-really.metter,5。

我希望正则表达式删除最后一个逗号和 5,因此输出将是:some\string,/doesnt-really.metter

我不能只使用正则表达式的任何附加模块。那么我应该使用哪个正则表达式?

另一个例子:

string_with,,,,,_no_point,some_string => string_with,,,,,_no_point

【问题讨论】:

  • 匹配/,[^,]*$/并替换为空字符串。
  • 另一种方式:/.*\K,.*// -- 贪婪匹配所有 (.*),直到 last 出现以下字符(此处为逗号)并删除所有那些匹配项 (\K),匹配一个逗号,然后匹配所有其他 (.*) 并将其删除。

标签: regex perl


【解决方案1】:

如果逗号后面总是跟一个或多个数字,您可以使用:s/,\d+$//。更一般地,使用s/,[^,]*$//(匹配一个逗号,后跟零个或多个非逗号字符,后跟字符串结尾)。

【讨论】:

    【解决方案2】:

    此正则表达式捕获最后一个 , 之前的所有内容。

    (.*),[^,]*$
    

    【讨论】:

      【解决方案3】:
      perl -n -e 'chomp; s/(.+,)/$1/g; print "$_\n";' inputfile.txt
      

      直接在终端上运行这个命令,正则表达式只选择最后一个逗号之前的所有文本。

      【讨论】:

      • 我不知道即使输入正确,为什么 chomp($_) 上面没有显示下划线。
      • 请测试您的代码。自己替换匹配的模式并不是很有用。
      • 您不需要在 chomp 或替换中指定 $_。
      猜你喜欢
      • 2013-01-23
      • 2016-11-08
      • 2021-10-19
      • 1970-01-01
      • 1970-01-01
      • 2015-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多