【问题标题】:Regex : How to start lookup from the end of string正则表达式:如何从字符串末尾开始查找
【发布时间】:2012-06-20 22:17:03
【问题描述】:

我想要所有个字符直到有一个大写,但从结束到开始。 (或从右到左)

blab blab 12 34 这是一个测试!

我需要This is a test!

这是我设法找到的:

^.*?(?=[A-Z])

但它返回blab blab 12 34

【问题讨论】:

  • @rubberboots 是的!我正在努力如何使用美元符号。天哪,这很容易......!谢谢!如果可能,请将其添加为答案,以便我接受。
  • 我明白了,Yossi 的答案提早了,所以他赢了比赛。我会接受失败;-)
  • @rubberboots 他的答案怎么没有出现?我不断刷新页面并没有看到它。无论如何抱歉,我将他的回答标记为已接受。如果不是,那将是不公平的。但我也赞成你的:D
  • 我是个老家伙t并且这些年来变得越来越慢;-)所以**没关系年轻的心得到了战利品(如果他们应得的;-) .

标签: regex uppercase right-to-left


【解决方案1】:

使用以下正则表达式:

irb(main):001:0> regex = /([A-Z][^A-Z]*)$/
irb(main):002:0> "blab blab 12 34 This is a test!".match regex
=> #<MatchData "This is a test!" 1:"This is a test!">

【讨论】:

    【解决方案2】:

    好的,我将添加它作为答案,稍后可能会将其开发为其他变体。简单的解决方案应该是某事。喜欢:

     [A-Z][^A-Z]*$
    

    测试(在 Perl 中):

     print $1 if 'blab blab 12 34 This is a test!' =~ /([A-Z][^A-Z]*)$/;
    

    返回:

     This is a test!
    

    要解决这个问题,需要将模式锚定在字符串的末尾 ($)。

    问候

    rbo

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-27
      • 2010-11-23
      • 1970-01-01
      • 1970-01-01
      • 2018-06-18
      • 1970-01-01
      • 2017-02-14
      相关资源
      最近更新 更多