$StringArray = 'This appl for you',
'This apple for you',
'This appleeee for you',
'This apples for you',
'This appleeees for you'
$StringArray | ForEach-Object { $_ -split '(apple*)' }
会导致
This
appl
for you
This
apple
for you
This
appleeee
for you
This
apple
s for you
This
appleeee
s for you
$StringArray = 'This appl for you',
'This apple for you',
'This appleeee for you',
'This apples for you',
'This appleeees for you'
$StringArray | ForEach-Object { $_ -split '(apples?)' ; write-host "`n"}
将导致:
This appl for you
This
apple
for you
This
apple
eee for you
This
apples
for you
This
apple
eees for you
我将添加一些解释:
在正则表达式中
*
表示“该字符或该字符之前的字符集重复 0 次或更多次”。apple*
意味着“e
后面appl
重复 0 次或更多次”,因此在加上appl
任意数量的e
例子:
会导致
正如其他人已经回答的那样,在这种特定情况下您需要的是
?
,这意味着“重复 0 或 1 次之前的字符”与s
末尾的字符相关联apple
。例子:
将导致:
您只需将 apple 末尾的“*”替换为“。”即可解决此问题。
这是我运行的:
这是因为“e*”只会检查“e”后面的任何字符。例如,它会接受“appleeee”,而不是任何其他字符。而“e.”会查找“e”前面的任何字符,但换行符除外。例如“apples”“apple”