regex - 使用 REGEX PowerShell 在 '_-_' 之前和之后获取单词
问题描述
我试图在一个看起来像' - '的非保证字符串之后获取单词之前和十进制字符串。
考虑这个字符串
"some str (targetWord - 12434 trailing string)"
不保证此字符串在“-”之前或之后有空格,因此它可能类似于以下内容之一
"some str (targetWord-12434 trailing string)"
"some str (targetWord- 12434 trailing string)"
"some str (targetWord -12434 trailing string)"
"some str (targetWord- 12434 trailing string)"
到目前为止,我有以下
$allServices = (Get-Service "Known Service Prefix*").DisplayName
foreach ($service in $allServices){
$service = $service.split('\((.*?)\)')[1] #esc( 'Match any non greedy' esc)
if($service.split()[0] -Match '-'){
$arr_services += $service.split('( - )')[0..1]
}else{
$arr_services += ($service -replace '-','').split()[0..1]
}
}
这适用于处理'-'和'-'的简单情况,但不能处理其他任何事情。我觉得这是可以由一行或最多两行 REGEX 处理的问题。
我想要结束的是一个字符串数组,其中偶数(包括零)是 targetWord,奇数值是十进制字符串。
我的问题不是我不能做到这一点,而是它看起来像垃圾......我的意思是我的目标是尝试使用正则表达式来获取每个单词,忽略'-',然后推出一个不断增长的数组 targetWord 和 decimalString。
我认为这更像是一个难题,并试图用它来提高我的 REGEX 技能。任何帮助表示赞赏!
解决方案
传递给操作员的单个正则表达式-match
就足够了:
$arr_services = $allServices | ForEach-Object {
if ($_ -match '\((?<word>\w+) *- *(?<number>\d+)') {
# Output the word and number consecutively.
$Matches.word, $Matches.number
}
}
# Output the resulting array.
$arr_services
请注意如何将管道输出作为数组 ( $arr_services = ...
) 直接收集在变量中 - 无需迭代地“添加”到数组中。如果您需要确保它$arr_services
始终是一个数组 - 即使管道仅输出一个对象,请使用[array] $arr_services = ...
使用您的示例字符串,以上产生(一个连续的字数对的平面数组):
targetWord
12434
targetWord
12434
targetWord
12434
targetWord
12434
至于正则表达式:
\(
匹配文字(
\w+
匹配在命名捕获组( ) 中捕获+
的单词字符 (\w
- 字母、数字、 ) 的非空运行 ( )。_
word
(?<word>...
*- *
匹配-
由任意数量的空格包围的文字 - 包括无 (*
)。\d+
匹配\d
在命名组中捕获的非空数字 ( )运行digits
。
如果-match
操作员找到匹配项,结果将反映在自动$Matches
变量中,这是一个允许直接按名称访问命名捕获组的哈希表。
推荐阅读
- java - Mockito spy:尝试在间谍类方法中使用 doReturn 但使用的是原始方法
- scala - 如何将 spark.read.json 用于数据框中的多个 json 列
- visual-studio-2019 - Visual Studio 2019:无法在解决方案资源管理器中重命名文件
- django - 使用 django rest 框架发布时发生 AssertionError
- javascript - 能拿到id但不能发post请求
- android-studio - Android Studio Kotlin:ArrayAdapter 不会让我覆盖 getView 函数
- virtual-machine - 在一个 VMM 上运行的不同虚拟机是否共享来宾物理地址空间?
- java - 为 Java 解析 XML
- c - MSP430 上寄存器的按位运算符,无需取消引用
- node.js - 来自 html 表单 req.body 的快递表单为空