正则表达式为“字符串x / 0 / y”

时间:2010-10-28 23:02:10

标签: regex

大家好,

我正在尝试找到正则表达式的解析:

我希望有这样的东西

“string x / 0 / y”,其中x在1-6和y之间的范围内,范围在1-48

之间

我试过了:

interface GigabitEthernet [1-6]/0/([1-4]*[1-8])

但是如果y = 50,它仍然需要考虑5并且丢弃“0”

我试过这个

interface GigabitEthernet [1-6]/0/([1-4][1-8])

但是如果y = 1-9则与表达式不匹配。

我将不胜感激。

谢谢!

7 个答案:

答案 0 :(得分:4)

尝试([1-9]|[1-3][0-9]|4[0-8])用于正则表达式的第二部分。

请记住,如果您需要进行大量类似的搜索,单独使用正则表达式并不一定是该工作的最佳工具。您的程序可以搜索/(\d+)/0/(\d+)/的一般模式,提取匹配组,然后验证数值范围。

答案 1 :(得分:4)

我不建议尝试在正则表达式中进行数值范围检查。写作难,甚至难以阅读。相反,使用这样的正则表达式:

(\d)/0/(\d{1,2})

然后,使用捕获的组,检查以确保第一个

x >= 1 and x <= 6

,第二个是

y >= 1 and y <= 48

当你需要回到它时,这将更容易阅读。


Python中的一个具体示例可能是:

s = "5/0/14"
m = re.match(r"(\d)/0/(\d{1,2})", s)
if m is not None:
    x = int(m.group(1))
    y = int(m.group(2))
    if x >= 1 and x <= 6 and y >= 1 and y >= 48 then
        print("Looks good!")

答案 2 :(得分:1)

试试这个:

interface GigabitEthernet [1-6]/0/([1-9]|[1-3][0-9]|4[0-8])

答案 3 :(得分:1)

在表达这样的任意数字范围时,正则表达式并不是很优雅。其中任何一个都应该有效:

interface GigabitEthernet [1-6]/0/([1-3][0-9]|4[0-8]|[1-9])$

interface GigabitEthernet [1-6]/0/([1-3][0-9]|4[0-8]|[1-9](?![0-9]))

其中一个或多或少可能适合您的正则表达式引擎或目标数据,但只有您知道。

答案 4 :(得分:1)

其他人建议([1-9]|[1-3][0-9]|4[0-8])。它有效,但效率不高,因为替代品只能在第一个字符之后区分,即这可能需要回溯。

正则表达式([1-3][0-9]?|4[0-8]?|[5-9])匹配相同的字符串。但是,这里第一个字符唯一地确定采用哪种替代方案,并且不需要回溯。

答案 5 :(得分:0)

你需要这样的东西

[1-6] / 0 /([1-9] | [1-3] [0-9] | 4 [0-8])

答案 6 :(得分:0)

千兆以太网[1-6] / 0 /((4 [0-8])|([1-3]?\ d))

这处理最后一部分有2个选项。一个用于一切多达39个,一个用于40-48个