【问题标题】:How to check and extract string via RegEx?如何通过正则表达式检查和提取字符串?
【发布时间】:2011-04-29 21:43:03
【问题描述】:

我正在尝试检查字符串是否以“@something”结尾,如果是,则从中提取“something”。例如,我正在尝试做这样的事情:

string temp = "//something//img/@src"
if (temp ends with @xxx)
{
   string extracted = (get "src");
   ...
}
else
{
   ...
}

我怎样才能做到这一点?

【问题讨论】:

    标签: c# .net asp.net regex string


    【解决方案1】:

    从您对我的其他答案的 cmets 看来,您需要的是这样的:

    string temp = "//something//img/@src";
    var match = Regex.Match(tmp, @"/@([\w]+)$", RegexOptions.RightToLeft);
    if (match.Success)
    {
       string extracted = match.Groups[1].Value;
       ...
    }
    else
    {
       ...
    }
    

    【讨论】:

      【解决方案2】:

      试试下面的

      var match = Regex.Match(tmp, @".*@(.*)$");
      if ( match.Success ) { 
        var extracted = match.Groups[1].Value;
        ...
      

      这里的诀窍是正则表达式中的()。这会将最终匹配分组到一个未命名的组中。然后可以通过 Match 变量上的 Groups 成员按索引访问此匹配项。这是第一个分组,所以索引是 1

      【讨论】:

      • Regex.Match 的参数被反转了。
      • 更简单的正则表达式,对于长输入字符串可能更有效:Regex.Match(tmp, @"@(.*?)$", RegexOptions.RightToLeft)
      【解决方案3】:

      不要为此使用正则表达式,这不值得。

      string temp = "//something//img/@src"
      int pos = temp.LastIndexOf('@');
      if (pos != -1)
      {
         string extracted = temp.Substring(pos+1);
         ...
      }
      else
      {
         ...
      }
      

      【讨论】:

      • 这是否适用于这样的事情://div[@id='large_image_display']//img[@class='photo']/@src(@ 符号可以在中间,但我只想检查它是否像“/@xxx”一样结束
      • 但是如果我的意思是我有这个: //div[@id='large_image_display']//img[@class='photo'] ... 它不应该匹配这种情况.换句话说,我正在尝试检查并提取字符串的结尾是否像这样“/@xxx”
      • 也许我们可以使用 temp.EndsWith 某种方式?
      • @TruMan1:您没有在问题中指定这一点。您应该具体说明您的要求,否则您得到的答案将不可避免地无法满足您未指定的要求。 (到目前为止,您收到的所有基于正则表达式的答案都与我的答案具有相同的行为。)
      猜你喜欢
      • 2013-11-08
      • 1970-01-01
      • 2017-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-05
      相关资源
      最近更新 更多