【发布时间】:2018-10-24 10:53:48
【问题描述】:
我希望我的正则表达式将以下类型的字符串捕获为两个带有 "%3f" 的 URL。
https://*****%3f****%3D,https://*****%3f****%3D …
应自行捕获此类型的每个字符串 URL。注意 - * 在这里是为了简化,并且 URLS 可以位于大字符串的任何部分,介于两者之间。
我现在的正则表达式是:
(https://\S+?%3f)(?<toDelete>\S+?%3D)
但我被要求查看是否有非惰性方法(或只是更快的版本),因为它比贪婪慢得多,并且这个正则表达式将在巨大的字符串和数据流上调用。
请注意,我不能简单地输入\S* 的原因是这样做会在一个匹配中捕获从第一个http 到最后一个%3D。
【问题讨论】:
-
为什么不用逗号分割然后得到
%3f之前的子串呢?如果要使用正则表达式,为什么要捕获%3f之后的内容?只需使用https://\S*?%3f。或者 - 如果你想要一个超高效的正则表达式 -https://[^%\s]*(?:%(?!3f)[^%\s]*)*%3f -
只是为了确定你能显示你想要的输出吗?不要假设正则表达式是最快的方法,我很确定@WiktorStribiżew 暗示 String.Split 可能会在这里胜过正则表达式。
-
它并不总是用逗号分隔,它可以在我的字符串的任何部分。正如我的正则表达式建议的那样,我想删除 %3f 之后的部分,所以我需要捕获它。