【问题标题】:Regex for a URL with illegal characters \\带有非法字符的 URL 的正则表达式 \\
【发布时间】:2021-12-17 18:26:14
【问题描述】:

来自以下字符串:

google.com/local/reviews?placeid\\u003dChIJ070npYRaeEgRZNoxwuYYrew\\u0026q\\u003d

提取u003dChIJ070npYRaeEgRZNoxwuYYrew虽然这个值每次都会改变。

我试过了

   Regex r = new Regex(@"("(?<=\placeid\\\s+)\p{L}+");

这不起作用。

我因忽略了我对正则表达式的了解而感到内疚,所以如果这太容易了,我深表歉意。

【问题讨论】:

  • 该文本是字符串文字还是纯文本?
  • 这是我将使用正则表达式的源代码的一部分。
  • 因为\p\p{L} 不行,你只需要var res = Regex.Match(text, @"placeid\\u003d(.*?)(?=\\u0026q|$)")?.Groups[1].Value。但可能您需要使用Regex.Unescape(text),而不仅仅是text,然后var res = Regex.Match(Regex.Unescape(text), @"[?&amp;]placeid=([^&amp;]*)")?.Groups[1].Value 就可以了。或者,反斜杠可能需要在上面的代码中加倍。请注意,\u003d=\u0026&amp;。如果您提供了一个测试用例 sn-p,它将更快、更有信心地回答您的问题。

标签: c# regex


【解决方案1】:

字符串中没有要与\s+ 匹配的空格字符,并且有2 个反斜杠。

使用\p{L}+ 只匹配任何字母,并且您想要的字符串还包含数字。

(?<=placeid\\\\\s*)[\p{L}\p{N}]+

Regex demo

例如

string pattern = @"(?<=placeid\\\\\s*)[\p{L}\p{N}]+";
string input = @"google.com/local/reviews?placeid\\u003dChIJ070npYRaeEgRZNoxwuYYrew\\u0026q\\u003d";

Match m = Regex.Match(input, pattern);
Console.WriteLine(m.Value);

输出

u003dChIJ070npYRaeEgRZNoxwuYYrew

【讨论】:

    猜你喜欢
    • 2015-04-21
    • 1970-01-01
    • 1970-01-01
    • 2013-02-19
    • 2010-10-10
    • 1970-01-01
    • 1970-01-01
    • 2013-11-19
    • 2016-01-06
    相关资源
    最近更新 更多