大家好,
我正在尝试找到正则表达式的解析:
我希望有这样的东西
“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则与表达式不匹配。
我将不胜感激。
谢谢!
答案 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个