gpt4 book ai didi

.net - 正则表达式组字符串,其中分隔符可以使用两次(.net 正则表达式)

转载 作者:行者123 更新时间:2023-12-02 19:01:12 24 4
gpt4 key购买 nike

我正在为 Excel 编写一个解析器,可以更新文档中的值。我目前正在解析电子表格文档格式的页眉/页 footer 分。 Excel中页眉/页脚的格式存储为纯文本,分隔符为:

  • &L
  • &C
  • &R

因此您的页眉/页脚在 xml 中可能如下所示:

&LTTodaysDate&CDocumentTitle&R作者姓名

如果您只有左右 header ,您的 xml 字符串将如下所示:

&LTTodaysDate&R作者姓名

我尝试创建一种模式,可以检测每个组并解析出组件(即 &L&C&R ) 以及该标记之后出现的任何文本。


正则表达式字符串是这样的:(&.{1})([A-Za-z\d_ ]*) ( Link to example )

但是,我遇到了边缘大小写问题,这意味着我无法正确解析包含&符号的 Excel header 。

在文档的 Excel 标题中,要在标题中包含 & 符号(纯文本形式),您必须键入 &&。因此带有 & 符号的 header xml 可能如下所示:

&RPork && Beans(这将在电子表格中显示“Pork & Beans”)。

我的正则表达式无法处理过早的&符号。在第一组 ((&.{1})) 中,我要求提供任何带有 & 符号及其后面的字符的内容(即 L/C/R)。当有 2 个 & 符号时,我如何告诉该组不包括在内。我的正则表达式技能还很新手,我可以在更高的水平上描述我想要的东西:

我想在看到 &L/&C/&R 的任何地方分割字符串,并捕获此后的所有文本,直到另一个 &L/&C/&R 分隔符(不包括新行空格等)。我可以在下面的 C# linq 中最好地描述这一点。

(&.{1}.Where(c => c != '&'))([A-Za-z\d_ ]*)

对于字符串“&RPork && Beans”

我的正则表达式捕获 2 个匹配,每个匹配有 2 个组:

匹配 1
第一组:“&R”第二组:“ pig 肉”

匹配 2
第一组:“&&”第 2 组:“ bean 类”

我希望它匹配一次:
第一组:“&R”第二组:“ pig 肉&& bean 类”

感谢您的帮助

最佳答案

您可以使用

var result = Regex.Split(s, "(&[LRC])").Where(x => !string.IsNullOrWhiteSpace(x));

请参阅regex demo(&[LRC]) 将匹配 &LRC 字母后,由于捕获括号,该值将被提取到结果数组中。

enter image description here

Another usage example :

var s = "&RPork && Beans&CDocument Title";
var result = Regex.Split(s, "(&[LRC])")
.Where(x => !string.IsNullOrWhiteSpace(x))
.ToList();
var data = result.Where((c,i) => i % 2 == 0).Zip(result.Where((c,i) => i % 2 != 0),
(delimiter, value) => new KeyValuePair<string, string>(delimiter, value));
foreach (var kvp in data)
Console.WriteLine("Delimiter: {0}\nValue: {1}", kvp.Key, kvp.Value);

输出:

Delimiter: &R
Value: Pork && Beans
Delimiter: &C
Value: Document Title

关于.net - 正则表达式组字符串,其中分隔符可以使用两次(.net 正则表达式),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55362158/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com