我正在尝试使用正则表达式来捕获空格分隔项中的值。是的,我知道我可以使用[string]::Split()
或-split
。目标是使用正则表达式,以便将其放入另一个更大的正则表达式的正则表达式中。
字符串中的项数是可变的。在本例中有四(4)个。生成的$Matches变量包含所有Value成员的完整字符串。我还尝试了regex '^((.*)\s*)+'
,但结果是除第一个.\value.txt外,所有成员都为“”
我怎样写一个正则表达式来捕获可变数量的项。
PS C:\src\t> $s = 'now is the time'
PS C:\src\t> $m = [regex]::Matches($s, '^((.*)\s*)')
PS C:\src\t> $m
Groups : {0, 1, 2}
Success : True
Name : 0
Captures : {0}
Index : 0
Length : 15
Value : now is the time
ValueSpan :
PS C:\src\t> $m.Groups.Value
now is the time
now is the time
now is the time
PS C:\src\t> $PSVersionTable.PSVersion.ToString()
7.2.2
3条答案
按热度按时间sg24os4d1#
您可以使用
[regex]::Match()
查找 first 匹配子字符串,然后调用NextMatch()
遍历输入字符串,直到找不到进一步的匹配。我冒昧地将表达式简化为
\S+
(连续的非空格字符):将打印:
yftpprvb2#
Mathias' answer示出了检索可能需要或不需要的所有匹配的 * 迭代 * 方法。
在您自己尝试使用
[regex]::Matches()
的基础上,解决方案非常简单:如上所述,
\S+
匹配 * 非 * 空白字符(\S
)的任何非空运行(+
)。由于member-access enumeration,访问方法调用结果(
System.Text.RegularExpressions.Match
示例的集合)上的.Value
属性,将返回每个示例的.Value
属性,如果有两个或更多示例,则会生成一个值的 * 数组 *。0x6upsns3#
我猜以下内容对您有用
[^\s]
表示“不是空格”+
表示1个或多个字符