正则表达式 - 如何将此字符串分成两部分

Posted

技术标签:

【中文标题】正则表达式 - 如何将此字符串分成两部分【英文标题】:Regex - How to split this string in two parts 【发布时间】:2022-01-20 05:00:21 【问题描述】:

我想把这个字符串分成两部分:

C:\Program Files\Autodesk\DWG TrueView 2021 - English\Setup\en-us\Setup\Setup.exe /P 28B89EEF-4356-0409-0100-CF3F3A09B77D /M AOEM /language en-US

我希望它总是在Setup.exe 之后分裂,所以应该是:

$part1 = "C:\Program Files\Autodesk\DWG TrueView 2021 - English\Setup\en-us\Setup\Setup.exe"
$part2 = "/P 28B89EEF-4356-0409-0100-CF3F3A09B77D /M AOEM /language en-US"

应该有什么功能来做到这一点?

谢谢

【问题讨论】:

您可以在.exe 之后第一次出现空格时拆分:$string -split '(?<=^.*\.exe)\s' 【参考方案1】:
$string = "C:\Program Files\Autodesk\DWG TrueView 2021 - English\Setup\en-us\Setup\Setup.exe /P 28B89EEF-4356-0409-0100-CF3F3A09B77D /M AOEM /language en-US" 
$array = $string -Split "(Setup.exe)"
$array[0]+$array[1]
$array[2]

还有其他简单的方法。这是一种方法。

【讨论】:

【参考方案2】:

这里有一些可供您选择的选择:

$string = 'C:\Program Files\Autodesk\DWG TrueView 2021 - English\Setup\en-us\Setup\Setup.exe /P 28B89EEF-4356-0409-0100-CF3F3A09B77D /M AOEM /language en-US'

方法一:使用-split

$part1, $part2 = $string -split '^(.+\.exe)\s(.+)$'
$part1   # --> C:\Program Files\Autodesk\DWG TrueView 2021 - English\Setup\en-us\Setup\Setup.exe
$part2   # --> /P 28B89EEF-4356-0409-0100-CF3F3A09B77D /M AOEM /language en-US

方法二:使用[regex].Match()

$part1, $part2 = ([regex]'(?i)^(.+\.exe)\s(.+)$').Match($string).Groups[1..2].Value
$part1   # --> C:\Program Files\Autodesk\DWG TrueView 2021 - English\Setup\en-us\Setup\Setup.exe
$part2   # --> /P 28B89EEF-4356-0409-0100-CF3F3A09B77D /M AOEM /language en-US

方法3:使用-replace结合方法.Split()

$part1, $part2 = ($string -replace '^(.+\.exe)\s(.+)$', '$1|$2').Split('|')
$part1   # --> C:\Program Files\Autodesk\DWG TrueView 2021 - English\Setup\en-us\Setup\Setup.exe
$part2   # --> /P 28B89EEF-4356-0409-0100-CF3F3A09B77D /M AOEM /language en-US

方法四:使用字符串方法.IndexOf().Substring()

$split = $string.IndexOf('.exe')
if ($split -ge 0) 
    $part1 = $string.Substring(0, $split + 4)
    $part2 = $string.Substring($split + 5)


$part1   # --> C:\Program Files\Autodesk\DWG TrueView 2021 - English\Setup\en-us\Setup\Setup.exe
$part2   # --> /P 28B89EEF-4356-0409-0100-CF3F3A09B77D /M AOEM /language en-US

【讨论】:

【参考方案3】:

只是分割空白并将它们重新组合在一起。根据您作为 -argumentlist 或与呼叫运算符的用途,您甚至可能不必将 $part2 数组连接在一起。

$string = 'C:\Program Files\Autodesk\DWG TrueView 2021 - English\Setup\en-us\Setup\Setup.exe /P 28B89EEF-4356-0409-0100-CF3F3A09B77D /M AOEM /language en-US'
$split = -split $string

$split
C:\Program
Files\Autodesk\DWG
TrueView
2021
-
English\Setup\en-us\Setup\Setup.exe
/P
28B89EEF-4356-0409-0100-CF3F3A09B77D
/M
AOEM
/language
en-US

$part1 = $split[0..5] -join ' '
$part2 = $split[6..$split.length] -join ' '
# $part2 = $split[6..$split.length]

【讨论】:

以上是关于正则表达式 - 如何将此字符串分成两部分的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式匹配在任意位置连字符并分成两行的特定单词

.* 和有啥不一样?和 .* 正则表达式?

当正则表达式的某些部分要保存在后续的分割字符串中时,如何使用正则表达式在R中拆分字符串?

php 正则表达式替换将任何名称分成两行

正则表达式与 C# 中的 OR 条件最长匹配

用于浮点数或 int 的 Python 正则表达式,而不是将浮点数分成两个浮点数