5

我如何从字符串的末尾定位一些东西:
complexthing---50 other-_-50 MORE__------50

我想以 (50) 结尾,但这个“复杂的东西--”可以以 - 所以在这种情况下,我不能在“ - ”处打破可能会使它感到困惑的乞求,所以对我来说最简单的正则表达式就是让它最后得到任何东西并在“ - ”处休息

-(.*)

总是有一个-在每 50 之前分隔数字和字符串,我想定位数字(50)

4

3 回答 3

9

如果我理解正确,这样的事情可能会起作用:

-(\d+)$

匹配连字符 (-) 后跟一个或多个数字 (\d+),紧邻字符串 ($) 的结尾。仅捕获数字( (...) )。

于 2012-10-12T22:01:35.780 回答
1

想想你要的是什么:

  • 始终位于字符串末尾的数字
  • 紧跟-字符的数字。
  • 跟在一个字符后面的东西-,它本身不是一个-字符。

这些都是表达您的问题的不同方式,随着我们的进行变得不那么具体。这些中的任何一个都可能满足您的需求,但我将介绍每种情况以展示它是如何做到的。

这些可以用多种不同的方式拼写。根据您使用的正则表达式风格,其中一些方法可能需要以不同方式转义(例如,X+vs X\+vs XX*),并且并非所有风格都支持所有方法。

“始终位于字符串末尾的数字”:

([0-9][0-9]*)$
([0-9]+)$
(\d+)$

正则表达式模式是贪婪的,即:它们尽可能匹配。因此,在第一种情况下,在字符串末尾询问至少一个数字(“在字符串末尾”指定为$),最终会在字符串末尾为您提供整个数字。

“紧跟-字符的数字”:

-([0-9][0-9]*)
-([0-9]+)
-(\d+)

在这里,我们指定它应该跟在一个-字符之后,而不是指定“字符串的结尾”。因为[0-9]不会匹配-字符本身,所以我们不需要做任何其他事情来避免捕获-

“跟在 - 字符后面的东西,它本身不是 - 字符”:

-([^-][^-]*)
-([^-]+)

这个有点棘手:我们没有指定我们想要一个数字,而是通过指定一个否定匹配 ( )来指定我们不需要破折号。[^X]有时-在字符类中匹配一个字符可能会很棘手,但规则是“总是-开头指定”,你应该没问题。

于 2012-10-12T22:16:57.027 回答
0

您可以使用 OR 运算符 ,|让它决定是这个还是那个。

于 2012-10-12T22:01:30.297 回答