RegEx解析SharePoint多值XML结果

时间:2014-06-02 16:49:04

标签: regex sharepoint

美好的一天,同事 SO&#c>

我使用 my favorite RegEx Tool 来解析字符串:

5;#.NET;#26;#ASP.NET;#1;#SharePoint;#3;#Windows Server;#20;#DB2

我使用PowerShell通过CAML查询SharePoint Web服务,我将已返回的XML解析为有意义的PSObject以运行某些业务逻辑。

我要.split() ;#,但我不喜欢结果。 注意:我稍后可能会重新考虑这个问题,但我希望答案更适合这个适当的RegEx ......

字符串结果将保持一致,每次都采用此格式,以数字开头,不以分号;结尾。

我想提取ID和值。如果不明显,则ID为整数,而值为#;之间的字符串。

我的RegEx反应还不是很蝙蝠侠,这个特殊的字符串对我来说是一个挑战。我想生成一个由ID和Value组成的干净结果作为捕获组...

3 个答案:

答案 0 :(得分:2)

<强> Online Demo

我认为这个表达式应该有效:/(\d+)(?:[;][#])([\w.]+)/g

答案 1 :(得分:1)

如果您有权访问Microsoft.SharePoint.dll程序集,那么非正则表达方式是使用SPFieldLookupValueCollection

new-object Microsoft.SharePoint.SPFieldLookupValueCollection "5;#.NET;#26;#ASP.NET;#1;#SharePoint;#3;#Windows Server;#20;#DB2"

                                       LookupId LookupValue                                   
                                       -------- -----------                                   
                                              5 .NET                                          
                                             26 ASP.NET                                       
                                              1 SharePoint                                    
                                              3 Windows Server                                
                                             20 DB2   

答案 2 :(得分:1)

当只想删除字符串后面的';#'时,您只需要这样:

string.split(/;#(?=\d)/g);

var string = "14;#Strategies/Policies;#6;#HR Systems;#154;#Design to Manufacture";

变为

["14;#Strategies/Policies", "6;#HR Systems", "154;#Design to Manufacture"]

demo

(?= \ d)是一个积极的前瞻。匹配主表达式后面的组,而不将其包含在结果中。

所以整个事情是在数字之前找到';#'但不包括数字。 ;#(?= \ d)

我保留索引的原因&amp;分号&amp; hashtag是因为如果我想了解更多关于该列表项的信息,那就是我发送给SP的内容。