Powershell正则表达式匹配一个没有其他数字的数字

时间:2019-01-25 13:41:21

标签: regex powershell sharepoint

在Sharepoint库中,我们有一个自定义字段,即多用户字段,该库存储员工图片。但是有时候人们会离开公司,我们需要删除他们的照片。

我创建了一个脚本,该脚本执行以下步骤:

  1. 它对整个库,多个用户字段进行查询,然后获得唯一列表。
  2. 然后,对于每个用户,它将查询列表,以查看哪些特定列表项具有某人的照片,这些照片在这里不再起作用。

Sharepoint这样存储多人字段的问题:

"ajax": {
  "error" = function (jqXHR, textStatus, error) {
    if (jqXHR && jqXHR.status == 440) {
      // Session expired - do something here
    } else if (jqXHR && jqXHR.status == 408) {
      // Request timeout - do something here
    } else {
      // Some other error - do something here
    }
  }

所以,我要做的是与比赛进行比较,但是我没有得到想要的结果。

示例结果:

57;#JohnSmith 56;#Johanna Smith

第一个结果是确定。

但是第二个结果是这样的:

56;#John Smith
Picture1_2012_09_07_123jpg.jpg +  + 56;#John Smith

我的脚本:

WilliamGates_1jpg.jpg +  + 056;#William Gates (Not OK)
JeanClaudeVanDamme_2011_05_24__112jpg.jpg +  + 560;#JeanClaudeVanDamme (Not OK)

1 个答案:

答案 0 :(得分:2)

我可能会采用另一种方法,即拆分多用户字符串。在您的示例中,这很麻烦,因为用户之间用空格隔开,但也可以包含空格。因此,我们必须将其与字符串开头的可预测模式结合使用,以获得可用于拆分的正则表达式。

我将示例输入字符串修改为以下内容进行测试:

  

57;#JohnSmith 56;#Johanna Smith 59;#Alexander Graham Bell 060;#Persona Non Grata

We can use this regex pattern to split the string: \s(?=\d+;#)

如果您查看该链接并单击“拆分列表”,则会看到以下内容:

  
      
  1. 57;#JohnSmith
  2.   
  3. 56;#Johanna Smith
  4.   
  5. 59;#Alexander Graham Bell
  6.   
  7. 060;#Persona Non Grata
  8.   

RegEx做什么?

  • \s-匹配空白(如果需要,可以将其替换为文字空间,也可以使用转义空间\
  • (?=...)-零宽度的超前查询,表示此处必须遵循的内容,但不算作比赛的一部分
  • \d+;#-\d+表示一个或多个数字,;#是文字({#仅需要在可包含注释的正则表达式模式中转义)

因此,总而言之,此模式的意思是:“匹配一个空格,但仅当其后跟1个或多个数字,然后是分号,然后是哈希/磅/八叉戟(#)时。

为什么这样做?

因为-split运算符可以使用正则表达式作为何时将字符串拆分为数组的基础。

为什么要使用数组?

因为您只需要查看所寻找的单个用户是数组中即可:

foreach($item in $userItems)
{
   $persons = $item["Persons_PDB"].ToString() -split '\s(?=\d+;#)'
   if($concatenatedUser -in $persons) # or $persons -contains $concatenateduser
   {
        write-host $item.File.Name +" " + $item["Persons_PDB"]
   } 
}

您在做什么吗?

我不知道。如果无法访问对象,则很难分辨。但是对我来说,SharePoint 多用户字段存储为单个字符串似乎不太可能,其中多个条目之间用空格 隔开,并且条目本身可以包含空格。也许您已经可以将其作为数组获取?也许您可以单独获取ID并进行某种直接比较?试一试用于查询SharePoint的对象和选项,看看是否可以简单一些。