我有一个字符串数组,如:
我需要选择所有不符合动态规则集的字符串。我真的不需要花哨的正则表达式,我只想匹配一些非常简单的正则表达式规则。基本上是:
var request = WebRequest.Create("http://maps.googleapis.com/maps/api/geocode/json?address=" + address +" +View,+CA&sensor=true_or_false");
var response = (HttpWebResponse)request.GetResponse();
request.ContentType = "application/json; charset=utf-8";
但是我需要一个由函数输入指定的动态数量的-ands。有没有简单的方法呢?
答案 0 :(得分:1)
好的,你可以这样做
$omits = "_s1","Print$"
$regex = '({0})' -f (($omits | ForEach-Object{[regex]::Escape($_)}) -join "|")
$arr | Where-Object{$_ -notmatch $regex}
$omits
将包含您想要-match
/ -notmatch
的字符串列表。然后我们取每个成员并在其上运行一个正则表达式转义($是一个特殊的正则表达式字符。行结束锚)获取每个擦除字符串并构建一个匹配组。所以在上面的例子中$regex
将是
(_s1|Print\$)
根据需要向$omit
添加更多条目。这将过滤结果为
File1
File2
PSDrive
PSParentPath
如果您可以信任逃避自己的正则表达式,那么您的选择就会更多。
$omits = "_s1","Print\$","^PS"
$regex = '({0})' -f ($omits -join "|")
这样PS就必须在字符串的开头。
答案 1 :(得分:0)
正如@Matt建议的那样,你的字符串static void main(...){}
中没有通配符基本上等同于-NotLike
(然后你可以使用-ne
)。我假设您的示例缺少通配符,但实际模式不是。
-NotIn
或者你可以做一些基本匹配:
$patternArray = 'File1','File2','File1_s1','File2_s1','Print$','PSDrive','PSParentPath';
foreach ($pattern in $patternArray) {
$Arr = $Arr | Where-Object {$_.Name -notlike $pattern};
}