gpt4 book ai didi

c# - 使用正则表达式查找具有随机顺序的可选组

转载 作者:行者123 更新时间:2023-11-30 20:57:51 25 4
gpt4 key购买 nike

我正在尝试使用 Regex 获取以下内容。

这是示例输入:

-emto=USER@HOST.COM -emfrom=USER@HOST.COM -emsubject="MYSUBJECT" 

其他输入:

-emto=USER@HOST.COM -emfrom=USER@HOST.COM -emcc=ME@HOST.COM -embcc=YOU@HOST.COM -emsubject="MYSUBJECT" 

我想要实现的是使用 -em 之后的文本获取命名组.所以我想要例如组 EMAIL_TO、EMAIL_FROM、EMAIL_CC、...请注意,我可以使用代码连接组名和捕获,没问题。

问题是我不知道如何捕获具有“随机”位置的可选组。例如,CC 和 BCC 并不总是出现,但有时会出现,然后我需要捕获它们。

谁能帮我解决这个问题?!

我目前拥有的:(?:-em(?<EMAIL_>to|cc|bcc|from|subject)=(.*))

最佳答案

只需执行以下操作:

-em([^\s=]+)=([^\s]+)

如果您需要支持值的引号,以便它们可以包含空格:

-em([^\s=]+)=("[^"]*"|[^\s]+)

并遍历命令行 arg 字符串中的所有匹配项。对于每场比赛,查看“ key ”(第一个捕获组)并查看它是否是您认识的那个。如果不是,则显示错误消息并退出。如果是,则相应地设置选项(第二个捕获组是“值”)。

POSTSCRIPT:这让我想起了在为计算机语言编写语法时经常出现的情况。

有可能(甚至很自然地)编写出仅适用于句法完美的程序的文法。但是为了获得良好的错误报告,最好编写一个接受语法正确程序的超集 的语法。获得解析树后,您可以运行它、查找错误并使用特定于应用程序的代码报告它们。

在这种情况下,您可以编写一个只匹配您实际接受的选项的正则表达式。但是如果有人输入错误的选项,正则表达式将无法匹配。您的程序将无法提供任何特定的错误消息,无论命令行参数是 -emsubjcet=something 还是完全不合时宜的东西,例如 @@#$* (#&U*REJDFFKDSJ**&#(*$&##.

POST-POSTSCRIPT:请注意匹配“定界符 + 任意数量的非定界符的字符”的非常常见的正则表达式模式。在我上面的正则表达式中,您可以在此处看到:([^\s=]+)= - 1 个或多个不是空格或 = 的字符,后跟 =。这使我们能够轻松地吃掉属于 key 的所有内容,但又不会走得太远并匹配分隔符 =。您可以在这里再次看到它:"[^"]*" -- 一个引号,后跟 0 个或多个不是引号的字符,后跟一个右引号。

关于c# - 使用正则表达式查找具有随机顺序的可选组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16520163/

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