Jus*_*ner 4 regex powershell split
这是我的代码:
[regex]::split("1,2 3", '(,|\s)+')
Run Code Online (Sandbox Code Playgroud)
我想要的是一个包含三个元素的数组1, 2, 3,但是,我得到的是一个包含五个元素的数组.
PS C:\Users\a> [regex]::split("1,2 3", '(,|\s)+').Length
5
PS C:\Users\a>
Run Code Online (Sandbox Code Playgroud)
如何得到我想要的?
添加实际split结果而不是length.
PS E:\> [regex]::split("1,2 3", '(,|\s)+')
1
,
2
3
PS E:\> [regex]::split("1,2 3", '(,|\s)+').length
5
PS E:\> [regex]::split("1,2 3", '[,\s]+')
1
2
3
PS E:\> [regex]::split("1,2 3", '[,\s]+').length
3
PS E:\>
Run Code Online (Sandbox Code Playgroud)
谢谢@Matt的回答,它指出了正确的方向.从help about_split文件中指出:
默认情况下,结果中省略了分隔符.要保留全部或部分分隔符,请在括号中包含要保留的部分.
以下是我的一些测试.
PS E:\tutorial> "Lastname/:/FirstName/:/Address" -split "/(:)/"
Lastname
:
FirstName
:
Address
PS E:\tutorial> "Lastname/:/FirstName/:/Address" -split "/:/"
Lastname
FirstName
Address
PS E:\tutorial> "Lastname/:/FirstName/:/Address" -split "(/:/)"
Lastname
/:/
FirstName
/:/
Address
PS E:\tutorial> "Lastname/:/FirstName/:/Address" -split "/:(/)"
Lastname
/
FirstName
/
Address
PS E:\tutorial> "Lastname/:/FirstName/:/Address" -split "(/):(/)"
Lastname
/
/
FirstName
/
/
Address
PS E:\tutorial> "Lastname/:/FirstName/:/Address" -split "(/)(:)(/)"
Lastname
/
:
/
FirstName
/
:
/
Address
PS E:\tutorial> [regex]::split("Lastname/:/FirstName/:/Address", '/(:)/')
Lastname
:
FirstName
:
Address
PS E:\tutorial> [regex]::split("Lastname/:/FirstName/:/Address", '/:/')
Lastname
FirstName
Address
PS E:\tutorial> [regex]::split("Lastname/:/FirstName/:/Address", '/:(/)')
Lastname
/
FirstName
/
Address
PS E:\tutorial> [regex]::split("Lastname/:/FirstName/:/Address", '(/):(/)')
Lastname
/
/
FirstName
/
/
Address
PS E:\tutorial> [regex]::split("Lastname/:/FirstName/:/Address", '(/)(:)(/)')
Lastname
/
:
/
FirstName
/
:
/
Address
PS E:\tutorial>
Run Code Online (Sandbox Code Playgroud)
在PowerShell中使用-split函数时,如果您在括号中有部分匹配项,那么您也要求返回该匹配项.我确信静态方法也是[regex]如此.考虑以下两个命令(与您的命令类似)的输出,您将看到
[regex]::split("1,2 3", '(,|\s+)')
1
,
2
3
[regex]::split("1,2 3", ',|\s+')
1
2
3
Run Code Online (Sandbox Code Playgroud)
在第一个示例中,您看到逗号和空格已作为元素返回.我在解释的内容记录在About_Split中
默认情况下,结果中省略了分隔符.要保留全部或部分分隔符,请在括号中包含要保留的部分.
在这种特殊情况下
正如评论中指出的那样,还有2个更理想的正则表达式字符串可以更好地处理这种特殊情况
(?:,|\s)+ 要么 [,\s]+
以前使用非捕获组和梯形图是一个字符类.
| 归档时间: |
|
| 查看次数: |
19543 次 |
| 最近记录: |