我如何从字符串的末尾定位一些东西:
complexthing---50
other-_-50
MORE__------50
我想以 (50) 结尾,但这个“复杂的东西--”可以以 - 所以在这种情况下,我不能在“ - ”处打破可能会使它感到困惑的乞求,所以对我来说最简单的正则表达式就是让它最后得到任何东西并在“ - ”处休息
-(.*)
总是有一个-在每 50 之前分隔数字和字符串,我想定位数字(50)
如果我理解正确,这样的事情可能会起作用:
-(\d+)$
匹配连字符 (-) 后跟一个或多个数字 (\d+),紧邻字符串 ($) 的结尾。仅捕获数字( (...) )。
想想你要的是什么:
-
字符的数字。-
,它本身不是一个-
字符。这些都是表达您的问题的不同方式,随着我们的进行变得不那么具体。这些中的任何一个都可能满足您的需求,但我将介绍每种情况以展示它是如何做到的。
这些可以用多种不同的方式拼写。根据您使用的正则表达式风格,其中一些方法可能需要以不同方式转义(例如,X+
vs X\+
vs XX*
),并且并非所有风格都支持所有方法。
“始终位于字符串末尾的数字”:
([0-9][0-9]*)$
([0-9]+)$
(\d+)$
正则表达式模式是贪婪的,即:它们尽可能匹配。因此,在第一种情况下,在字符串末尾询问至少一个数字(“在字符串末尾”指定为$
),最终会在字符串末尾为您提供整个数字。
“紧跟-
字符的数字”:
-([0-9][0-9]*)
-([0-9]+)
-(\d+)
在这里,我们指定它应该跟在一个-
字符之后,而不是指定“字符串的结尾”。因为[0-9]
不会匹配-
字符本身,所以我们不需要做任何其他事情来避免捕获-
。
“跟在 - 字符后面的东西,它本身不是 - 字符”:
-([^-][^-]*)
-([^-]+)
这个有点棘手:我们没有指定我们想要一个数字,而是通过指定一个否定匹配 ( )来指定我们不需要破折号。[^X]
有时-
在字符类中匹配一个字符可能会很棘手,但规则是“总是-
在开头指定”,你应该没问题。
您可以使用 OR 运算符 ,|
让它决定是这个还是那个。