我已经尝试了很多次,试图找出在字符串中第二个破折号之后获取字符串结尾的正则表达式,但它们都不能正常工作。我的字符串有以下形式:
Special - VIP - 40 2-Hr and 1-Hr - 2-Hour Workshop - 35
我需要提取字符串末尾的数字。我可以对第一个字符串使用(?:[^-\n]+-){2}(.*)$,但我不能将其应用于第二个字符串(因为数字实际上在第四个破折号之后)。我试图在表达式中的破折号之前和之后放置,但不起作用。我错过了什么?谢谢你。
(?:[^-\n]+-){2}(.*)$
wfauudbj1#
你能使用one-or-more-digits然后end-of-string模式吗?如果可以,那么这样做怎么样:
one-or-more-digits
end-of-string
\d+$
无论如何,这应该可以让你开始了,例如,如果你只想要一个两位数的数字,将\d+改为\d\d。如果它需要在两个破折号之后,那就有点麻烦了,但是让我们先从上面的开始。如果你真的需要第二个,它可能会开始看起来像这样(尽管只有当模式比给出的示例复杂得多时,它才真正有意义):
\d+
\d\d
(?: - )(?:[^-]+|(?:\S-.)|(?:.-\S))+(?: - )(\d+)$
bkkx9g8r2#
您可以用途:
^(?:[^-\n]+-){2}.*\b(\d+)$
说明
^
(?:[^-\n]+-){2}
.*
\b
(\d+)
$
参见regex demo。
2条答案
按热度按时间wfauudbj1#
你能使用
one-or-more-digits
然后end-of-string
模式吗?如果可以,那么这样做怎么样:\d+$
无论如何,这应该可以让你开始了,例如,如果你只想要一个两位数的数字,将
\d+
改为\d\d
。如果它需要在两个破折号之后,那就有点麻烦了,但是让我们先从上面的开始。如果你真的需要第二个,它可能会开始看起来像这样(尽管只有当模式比给出的示例复杂得多时,它才真正有意义):(?: - )(?:[^-]+|(?:\S-.)|(?:.-\S))+(?: - )(\d+)$
bkkx9g8r2#
您可以用途:
说明
^
字符串开始(?:[^-\n]+-){2}
匹配2个破折号.*
匹配行的其余部分\b
A字边界(\d+)
捕获组1,匹配1+数字$
字符串结束参见regex demo。