Regex Group可选

时间:2016-09-23 16:06:38

标签: c# regex

我有以下正则表达式,它没有像我想象的那样工作。

youtube-dl -o 'test2.%(ext)s' --extract-audio --audio-format mp3 --no-check-certificate https://www.youtube.com/watch?v=BaW_jenozKc

我正在尝试匹配一个以2或4位开头的字符串,后跟一个句点,后跟2位数字,然后是另一个句点和2或4位数字。

我希望33.44.4444可以工作,33.33可以工作,但是只要我有一个第二个句号的字符串,我的表达式就会失败。

我做错了什么?

4 个答案:

答案 0 :(得分:1)

你的正则表达式对于你想要做的事情是正确的,除了{2-4}部分,如果你使用{2,4}它将用于你正在寻找的2到4个字符捕获。

("^\\d{2}(?:\\d{2})?\\.\\d{2}(\\.\\d{2,4})?$");

希望它有所帮助。

答案 1 :(得分:1)

正如其他人指出的那样,语法{2-4}是不正确的。使用{2,4}指定出现的范围。但是如果你只想要2或4(不是3),我会使用这个正则表达式:

@"^(\d{2}|\d{4})\.\d{2}(\.(\d{2}|\d{4}))?$"

答案 2 :(得分:0)

您可以使用此正则表达式:

^\d{2}(?:\d{2})?\.\d{2}(?:\.\d{2}(?:\d{2})?)?$

\d{2-4}将按字面匹配{2-4}文字。

RegEx Demo

答案 3 :(得分:0)

你表达的方式"两个或四个数字"在你的表达的第一部分是正确的:

\\d{2}(?:\\d{2})?

第二部分做错了:

(\\.\\d{2-4})?

将第一部分复制到第二部分以解决问题:

("^\\d{2}(?:\\d{2})?\\.\\d{2}(\\.\\d{2}(?:\\d{2})?)?$");

Demo.