美好的一天,同事 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组成的干净结果作为捕获组...
答案 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"]
(?= \ d)是一个积极的前瞻。匹配主表达式后面的组,而不将其包含在结果中。
所以整个事情是在数字之前找到';#'但不包括数字。 ;#(?= \ d)
我保留索引的原因&amp;分号&amp; hashtag是因为如果我想了解更多关于该列表项的信息,那就是我发送给SP的内容。