【问题标题】:Powershell Regex QueryPowershell 正则表达式查询
【发布时间】:2017-10-10 17:10:34
【问题描述】:

我在从源字符串中提取所需值时遇到了一些问题。

我有 2 种可能的字符串格式(我根据 -match 操作和 if 检查来区分):

{u'specialGroup': u'projectWriters', u'role': u'WRITER'

, {u'role': u'WRITER', u'userByEmail': u'john@domain.com'

我希望从正则表达式返回的内容:

[0]projectWriters

[1]WRITER

[0]WRITER

[1]john@domain.com

基本上我需要将起始字符串 : u' 和结束字符串 ' 之间的所有值作为数组值 [0] 和 [1] 返回,但无法找出正则表达式模式。

尝试:

[regex]::match($stuff[1], ": u'([^']+)'").groups

Groups   : {: u'WRITER', WRITER}    
Success  : True
Captures : {: u'WRITER'}
Index    : 10
Length   : 11
Value    : : u'WRITER'



Success  : True
Captures : {WRITER}
Index    : 14
Length   : 6
Value    : WRITER

但没有john@domain.com 值的迹象。

【问题讨论】:

    标签: regex string powershell


    【解决方案1】:

    一种务实的做法,假设所有字符串具有相同的字段结构:

    $strings = "{u'specialGroup': u'projectWriters', u'role': u'WRITER'}",
               ", {u'role': u'WRITER', u'userByEmail': u'john@domain.com'"
    
    $strings | ForEach-Object { ($_ -split 'u''|''' -notmatch '[{}:,]')[1,3] }
    

    产量:

    projectWriters
    WRITER
    WRITER
    john@domain.com
    

    至于你尝试了什么:

    [regex]::match() 只返回 one 匹配项,因此您需要将解决方案基于 [regex]::matches() - 复数! - 返回所有个匹配项,然后提取感兴趣的捕获组值。

    $strings | ForEach-Object { [regex]::matches($_, ": u'([^']+)'").Groups[1,3].Value }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-18
      • 2020-10-26
      • 2015-09-23
      • 1970-01-01
      相关资源
      最近更新 更多