【问题标题】:Building expression from list of numbers从数字列表构建表达式
【发布时间】:2021-12-25 03:01:54
【问题描述】:

我有一个可变的数字列表(交换机端口),我需要将其构建到一个字符串中,指示哪些端口应该“包含”,哪些应该“排除”。 以下是所需格式的示例:

(Port 1[!(0-2 | 4-9)] | Port 4[!(0-3 | 5)])*

在本例中,如果我的号码是 1-19 和 40-45,则端口 1、端口 3 和端口 44 将包括在内,而端口 10-12、14-19、40-43 和 45 将包括在内排除在外。

我事先不知道端口列表中会出现什么数字。如何构建这个表达式?

【问题讨论】:

  • “表达式”是指正则表达式吗?
  • 我会使用条件正则表达式,但如果您不熟悉正则表达式,它可能不那么可读 -> Port (1)?(?(1)(3|$)|(4)?(?(3)(4|$)|[235-9]))

标签: powershell powershell-5.1


【解决方案1】:

如果我将其正确理解为正则表达式... 1-9 和 20-39 是其他情况。所以包括 1-9,13,20-39,44。

1..9 + 13 + 20..39 + 44 | % tostring 'port 0' | 
  select-string 'port [1-9]$|port 1[^0-2,4-9]|port [2-3][0-9]|port 4[^0-3,5]'

port 1
port 2
port 3
...


10..12 + 14..19 + 40..43 + 45 | % tostring 'port 0' | 
  select-string 'port [1-9]$|port 1[^0-2,4-9]|port [2-3][0-9]|port 4[^0-3,5]'
# no output

或者只是检查一个字符串是否在一个集合中:

$include = 1..9 + 13 + 20..39 + 44 | % tostring 'port 0'
1..45 | % tostring 'port 0' | where { $_ -in $include }

port 1
port 2
port 3
...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-02
    • 1970-01-01
    • 2018-05-08
    • 1970-01-01
    • 2014-06-06
    • 2016-01-13
    • 2012-04-19
    • 1970-01-01
    相关资源
    最近更新 更多