Convert-String

设置字符串的格式以匹配示例。

语法

Convert-String
       [-Example <System.Collections.Generic.List`1[System.Management.Automation.PSObject]>]
       -InputObject <String>
       [<CommonParameters>]

说明

该 cmdlet 格式化字符串以匹配示例的格式。

示例

示例 1:转换字符串的格式

"Mu Han", "Jim Hance", "David Ahs", "Kim Akers" | Convert-String -Example "Ed Wilson=Wilson, E."

Han, M.
Hance, J.
Ahs, D.
Akers, K.

第一个命令创建一个包含名字和姓氏的数组。

第二个命令根据示例设置名称的格式。 它将姓氏放在输出的前面,后跟首字母。

示例 2:简化字符串的格式

$composers = @("Johann Sebastian Bach", "Wolfgang Amadeus Mozart", "Frederic Francois Chopin", "Johannes Brahms")
$composers | Convert-String -Example "first middle last=last, first"

Bach, Johann
Mozart, Wolfgang
Chopin, Frederic
Brahms, Johannes

第一个命令创建一个包含名字、中间名和姓氏的数组。 请注意,最后一个条目没有中间名。

第二个命令根据示例设置名称的格式。 它将名字放在输出的前面,后跟姓氏。 删除了所有中间名;会正确处理没有中间名的条目。

示例 3:字符串不匹配时的输出管理示例

$composers = @("Johann Sebastian Bach", "Wolfgang Amadeus Mozart", "Frederic Francois Chopin", "Johannes Brahms")
$composers | Convert-String -Example "first middle last=middle, first"

Sebastian, Johann
Amadeus, Wolfgang
Francois, Frederic

第一个命令创建一个包含名字、中间名和姓氏的数组。 请注意,最后一个条目没有中间名。

第二个命令根据示例设置名称的格式。 它将中间名放在输出的前面,后跟姓氏。 跳过 $Composers 中的最后一个条目,因为它与示例模式不匹配:它没有中间名。

示例 4:谨慎使用装饰空格

$composers = @("Antonio Vivaldi", "Richard Wagner ", "Franz Schubert", "Johannes Brahms ")
$composers | Convert-String -Example "Patti Fuller = Fuller, P."

Wagner, R.
 Brahms, J.

第一个命令创建一个名字和姓氏数组。 请注意,第二个条目和第四个条目在姓氏后有额外的尾随空间。

第二个命令转换与示例模式匹配的所有字符串:字、空格、字和最后的尾随空格,所有内容都在等号 (=) 前面。 另请注意输出中的前导空格。

示例 5:使用多个模式设置进程信息的格式

$ExamplePatterns = @(
    @{before='"Hello","World"'; after='World: Hello'},
    @{before='"Hello","1"'; after='1: Hello'},
    @{before='"Hello-World","22"'; after='22: Hello-World'},
    @{before='"hello world","333"'; after='333: hello world'}
)
$Processes = Get-Process   | Select-Object -Property ProcessName, Id | ConvertTo-Csv -NoTypeInformation
$Processes | Convert-String -Example $ExamplePatterns

Id: ProcessName
4368: AGSService
8896: Amazon Music Helper
4420: AppleMobileDeviceService
...
11140: git-bash
0: Idle
...
56: Secure System
...
13028: WmiPrvSE
2724: WUDFHost
2980: WUDFHost
3348: WUDFHost

$ExamplePatterns 通过示例定义数据中不同的预期模式。

第一个模式 @{before='"Hello","World"'; after='World: Hello'},如下所示:

  • 需要是字符串,其中字括在双引号中,后跟逗号,
  • 然后是第二个字和第三个字,字用引号括起来;
  • 字符串中没有空格。 在输出中:先放置第二个字,
  • 没有引号,后跟一个空格,然后是第一个字,没有引号。

第二个模式 @{before='"Hello","1"'; after='1: Hello'},如下所示:

  • 需要是字符串,其中字括在双引号中,后跟逗号,
  • 然后用引号将数字括起来;
  • 字符串中没有空格。 在输出上:先放置数字,
  • 没有引号,后跟一个空格,然后是字,没有引号。

第三个模式 @{before='"Hello-World","22"'; after='22: Hello-World'},如下所示:

  • 需要是字符串,其中带连字符的两个字
  • 用双引号括起来,后跟逗号,然后用引号将数字括起来;
  • 逗号和第三个双引号之间没有空格。
  • 在输出上:先放置数字,不带引号,再放置单个空格,
  • 然后是连字符字,不带引号。

第四个也是最终模式 @{before='"hello world","333"'; after='333: hello world'},如下所示:

  • 需要是字符串,其中用空格分隔的两个字
  • 用双引号括起来,后跟逗号,然后用引号将数字括起来;
  • 逗号和第三个双引号之间没有空格。
  • 在输出上:先放置数字,不带引号,再放置单个空格,
  • 然后是中间带空格的字,不带引号。

第一个命令使用 Get-Process cmdlet 获取所有进程。 该命令将它们传递给 Select-Object cmdlet,该 cmdlet 选择进程名称和进程 ID。 在管道结束时,该命令使用 ConvertTo-Csv cmdlet 将输出转换为逗号分隔值,不包含类型信息。 该命令将结果存储在 $Processes 变量中。 $Processes 现在包含进程名称和 PID。

第二个命令指定更改输入项顺序的示例变量。 该命令覆盖 $Processes 中的每个字符串。

注意

第四个模式隐式表示两个或多个用空格分隔的字匹配。 如果没有第四个模式,则只有用双引号括起来的字符串的第一个字匹配。

参数

-Example

指定目标格式的示例列表。 使用左侧的源模式和右侧的目标模式指定用等号 (=) 分隔的对,如以下示例所示:

  • -Example "Hello World=World, Hello"
  • -Example "Hello World=World: Hello",'"Hello","1"=1: Hello'

注意

第二个示例使用模式列表

或者,指定包含 Before 和 After 属性的哈希表列表。

  • -Example @{before='"Hello","World"'; after='World: Hello'}, @{before='"Hello","1"'; after='1: Hello'}

注意

避免在等号周围使用空格 (=),因为它们被视为模式的一部分。

类型:List<T>[PSObject]
别名:E
Position:Named
默认值:None
必需:False
接受管道输入:False
接受通配符:False

-InputObject

指定要设置格式的字符串。

类型:String
Position:Named
默认值:None
必需:True
接受管道输入:True
接受通配符:False

输入

String

可以通过管道将字符串传递给此 cmdlet。

输出

String

此 cmdlet 返回一个字符串。