我有由相同的部分组成的行,我想从其中删除一半;例如,'AbcAbc'应该变成'Abc'。
数据看起来总是这样:
10.22.20.106/tcp/8010.22.20.106/tcp/80
10.22.20.46/tcp/44310.22.20.46/tcp/443
10.22.20.90/tcp/44310.22.20.90/tcp/443
10.22.20.90/tcp/8010.22.20.90/tcp/80
10.22.20.89/tcp/44310.22.20.89/tcp/443
10.22.20.89/tcp/8010.22.20.89/tcp/80
10.22.20.29/tcp/44310.22.20.29/tcp/443
10.22.20.29/tcp/8010.22.20.29/tcp/80
10.22.20.122/tcp/44310.22.20.122/tcp/443
10.22.20.123/tcp/44310.22.20.123/tcp/443
10.22.20.79/tcp/44310.22.20.79/tcp/443
10.22.20.79/tcp/8010.22.20.79/tcp/80
10.22.20.78/tcp/44310.22.20.78/tcp/443
10.22.20.78/tcp/8010.22.20.78/tcp/80
10.22.20.74/tcp/44310.22.20.74/tcp/443
10.22.20.74/tcp/8010.22.20.74/tcp/80
10.22.20.22/tcp/44310.22.20.22/tcp/443
10.22.20.22/tcp/8010.22.20.22/tcp/80
10.22.20.99/tcp/44310.22.20.99/tcp/443
10.22.20.99/tcp/8010.22.20.99/tcp/80
10.22.20.54/tcp/44310.22.20.54/tcp/443
10.22.20.54/tcp/8010.22.20.54/tcp/80我计算字符串中的字符数,然后将其减半,但不确定如何使用计算出的(减半)字符数来剪切原始字符串。
$vip_ip = $vip_line.("Virtual IP Address/Protocol/Port")
$half_string = $vip_ip.length /2$vip_ip.length 44
$half_string 22
$vip_cut = $vip_ip.(0,-$halfstring)发布于 2019-03-12 11:56:03
您正在尝试收集字符串方法"".SubString()所需的信息。
在你的情况下,你只需要这样的东西:
$vip_ip.substring(0,$halfstring)从一开始就走到一半。也可以从半途而废开始,因为答案是一样的。SubString()支持这两种重载。
$vip_ip.substring($halfstring)发布于 2019-03-12 12:56:09
Matt's answer 是去的方法,但是只是给出了一个https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_regular_expressions-based的替代方案
-replace,主要是作为一个有趣的实验
注意:虽然这个解决方案很简洁,但在我的测试中它比.Substring()-based方法要慢2-3倍。
# Extract one half of the input string consisting of identical halves.
PS> '10.22.20.54/tcp/44310.22.20.54/tcp/443' -replace '^(.+)\1$', '$1'
10.22.20.54/tcp/443^(.+)在字符串的开始(^)匹配一个或多个(+) (非换行符)字符(.),并在捕获组中捕获它们。\1$匹配一个反向引用(\1),它在字符串($)的末尾引用(第一个也是唯一的)捕获组匹配的内容。
实际上,只有当输入由相同的一半组成时,整个正则表达式才会匹配。$1作为-regex替换操作数,然后返回(第1也是唯一)捕获组匹配的内容,即输入字符串的前半部分。注意,这样的正则表达式效率很低,因为它需要大量的回溯,因为中途点是事先不知道的。
在这种情况下,使用非贪婪的修饰符(+?而不是+)也有效,但在实践中,在性能方面似乎没有什么区别(想必,使用.+?需要同样数量的“前向跟踪”尝试)。
https://stackoverflow.com/questions/55120680
复制相似问题