我需要帮助来过滤掉列表中的名称。
到目前为止,正则表达式代码可以解决所有问题
(.*(SCARCP|SCDIRP).*)
示例我需要如何过滤的列表:
SGP-SCARCP03 - MATCH
SIN-SCARCP03 - MATCH
SIN-SCARCP04 - FILTER OUT
SIN-SCARCP06 - MATCH
SYD-SCARCP01 - MATCH
SYD-SCARCP02 - FILTER OUT
TOK-SCARCP02 - MATCH
SIN-SCDIRP01 - MATCH
答案 0 :(得分:0)
您应始终将语言标记为正则表达式支持功能的某些实现(“风格”),而其他人则不会。另请注意,我为演示添加了一些条目。我需要另一个 - 没有结果来正确演示。
这两个位置(<<
)似乎暗示服务器在不同位置可以具有相同的“名称”。在这种情况下这是不幸的(如果你没有列表,你可以动态生成,我稍后会介绍)。
SGP-SCARCP03 - MATCH
SIN-SCARCP03 - MATCH
SIN-SCARCP04 - FILTER OUT
SIN-SCARCP06 - MATCH
SYD-SCARCP01 - MATCH
SYD-SCARCP02 - FILTER OUT <<
TOK-SCARCP02 - MATCH <<
SIN-SCDIRP01 - MATCH
如果您需要手动输入,这是您的正则表达式。请注意,-1
是我认为永远不会匹配的占位符。这样您就可以看到需要输入|
分隔列表的位置,就像使用SYD-SCARCP(?!(?:02|99)\b)
^.*(SYD-SCARCP(?!(?:02|99)\b)|SGP-SCARCP(?!(?:-1)\b)|TOK-SCARCP(?!(?:-1)\b)|SIN-SCARCP(?!(?:04)\b)|SCDIRP(?!(?:02)\b)).*$
(demo,请注意多行标志是打开的,以及freespacing标志,但仅当您使用间隔开的正则表达式时才会这样做。)
^
.*?
(
SYD-SCARCP
(?!
(?:02|99)
\b
)
|
SGP-SCARCP
(?!
(?:-1)
\b
)
|
TOK-SCARCP
(?!
(?:-1)
\b
)
|
SIN-SCARCP
(?!
(?:04)
\b
)
|
SCDIRP
(?!
(?:02)
\b
)
)
.*$
如果您在同一行上有两个服务器名称,则此特定设计可能无效,但速度比替代方案快。
现在,虽然很乱,但可能会有一些好消息。如果你有一个列表,一些标记开发服务器或实时服务器的数据库标志,就像你可以构建一个生产服务器名称数组(它更容易匹配而不是排除。
比方说我们构建的数组是
lives = {"SGP-SCARCP03","SIN-SCARCP03","SIN-SCARCP06","SYD-SCARCP01","TOK-SCARCP02","SIN-SCDIRP01"}
我可能会建议按字母顺序对字符串进行反向排序。像lives.sort().reverse()
这样的东西。如果两个字符串“重叠”说“ SGP-SCARCP03 ”和“ SGP-SCARCP03 0”和“ SGP-SCARCP03”,则反转可以帮助交替获取相应的字符串强> 1"
您可以使用您的语言可能支持的任何array.join/concat
方法
livelist = strings.join(lives,"|")
并将正则表达式构建为字符串
REFilter = "^.*?\b(?:" & liveslist & ")\b.*$"
\b
表示RegEx的大多数版本中的单词边界。
在我们的案例中,这将成为
.*?\b(?:SGP-SCARCP03|SIN-SCARCP03|SIN-SCARCP06|SYD-SCARCP01|TOK-SCARCP02|SIN-SCDIRP01)\b.*$
我还建议在将数组转换为管道分隔列表之前,按字母顺序对数组进行排序。
我建议之前按字母顺序对列表进行排序。然后,您可以通过一些代码向导将正则表达式字符串向下调整,使其看起来更像
(?:TOK-(?:SCARCP(?:02))|SYD-(?:SCARCP(?:01|07))|SIN-(?:SCARCP(?:06|03)|SCDIRP(?:01))|SGP-(?:SCARCP(?:03)))
执行此操作的原因是回溯以查找匹配项,但在许多情况下使用简单表达式时,差异可能不明显。
然后
^.*?(?:TOK-(?:SCARCP(?:02))|SYD-(?:SCARCP(?:01|07))|SIN-(?:SCARCP(?:06|03)|SCDIRP(?:01))|SGP-(?:SCARCP(?:03))).*$
demo
将最终字符串转换为您正在使用的任何语言的实际正则表达式对象。