C# 匹配以已知字符串开头的数字,后跟未知数量的字符
C# 匹配以已知字符串开头的数字,后跟未知数量的字符,c#,regex,C#,Regex,[一些单词:200:1000] 尝试仅匹配最后的1000部分。这两个数字都是可变的,可以包含未知数量的字符(虽然它们应该包含数字,但我不能排除它们也可能包含其他字符)。SOME_WORDS部分是已知的,不会更改 因此,我首先对[一些单词:进行正向后向查找,然后对后面的]进行正向前向查找。 这就给了我们一个模式(?你通常不能在回顾中使用+或*,而只能在前瞻中使用。 如果c确实允许这些,那么您可以使用*?而不是*,因为*将吃掉第二个: 试试这个: (?您通常不能在向后看中使用+或*,而只能在向前看中
[一些单词:200:1000]
尝试仅匹配最后的1000
部分。这两个数字都是可变的,可以包含未知数量的字符(虽然它们应该包含数字,但我不能排除它们也可能包含其他字符)。SOME_WORDS部分是已知的,不会更改
因此,我首先对[一些单词:
进行正向后向查找,然后对后面的]进行正向前向查找。
这就给了我们一个模式
(?你通常不能在回顾中使用+
或*
,而只能在前瞻中使用。
如果c确实允许这些,那么您可以使用*?
而不是*
,因为*
将吃掉第二个:
试试这个:
(?您通常不能在向后看中使用+
或*
,而只能在向前看中使用。
如果c确实允许这些,那么您可以使用*?
而不是*
,因为*
将吃掉第二个:
试试这个:
(?正如Robert Smit提到的,这是因为*
是一个贪婪的运算符。贪婪运算符在第一次匹配时尽可能多地消耗字符。只有在匹配失败时才会放弃字符。如果您使贪婪运算符懒惰(*?
),则匹配将使用尽可能少的字符数以使匹配成功,因此:
不会被*使用。
您也可以使用[^:]*
匹配除以外的任何字符:
正如Robert Smit提到的,这是因为*
是一个贪婪的操作符。贪婪的操作符在第一次匹配时会消耗尽可能多的字符。如果匹配失败,他们只会放弃字符。如果你让贪婪的操作符懒惰(*?
),则匹配将使用尽可能少的字符数以使匹配成功,因此:
不会被*。
您也可以使用[^:::*
来匹配除:
以外的任何字符,简单地回答“不”。为什么不这样做呢:\[一些单词:\d+:(\d+)]
?或者即使你不能保证数字是数字,也可以这样做:\[一些单词:.+:(.+)\]
@Garry你可以试试这个(?@AvinashRaj不确定那是不是有效的regexto简单地回答,不。为什么不这样做:\[一些单词:\d+:(\d+)\]
?或者即使你不能保证数字是数字:\[一些单词:+:(。+)\]
@Garry你可以试试这个(?@AvinashRaj不确定那是有效的正则表达式