1

我在谷歌上搜索了 30 分钟,但没有找到任何可以帮助我的东西。

我的问题是我正在尝试使用 RegExp 从字符串中解析某些内容。我通常是一名 PHP 开发人员并且会使用preg_match_all()它,但由于 C# 中不存在这(哦,真的),我需要别的东西。

想象一下我有这个字符串:

string test = "Hello this is a 'test' a cool test!";

现在我想获取单引号 ( ' ) 中的内容 - 在此示例中为test

提前感谢您帮助我。对不起我的英语不好,这不是我的母语!:/

4

4 回答 4

2

一种更简单、非正则表达式的方法:

string textInQuotes = String.Empty;
string[] split = test.Split('\'');
if (split.Length > 2) textInQuotes = split[1];
于 2012-08-24T19:50:45.553 回答
2

C# 的做法 preg_match_all是使用System.Text.RegularExpressions.Regex类和Match方法。

于 2012-08-24T19:38:14.787 回答
1

这是示例应用程序代码。

using System;
using System.Text.RegularExpressions;

namespace ExampleApp
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            // This is your input string.
            string test = "Hello this is a 'test' a cool test!";
            // This is your RegEx pattern.
            string pattern = "(?<=').*?(?=')";

            // Get regex match object. You can also experiment with RegEx options.
            Match match = Regex.Match(test, pattern);
            // Print match value to console.
            Console.WriteLine(match.Value);
        }
    }
}

希望它有帮助!

于 2012-08-24T19:45:32.360 回答
1

这是一个正则表达式解决方案,它允许在文本的引用部分中使用转义分隔符。如果您更喜欢 *nix 反斜杠样式的转义,只需将正则表达式的适当部分 , 替换('')(\\').

static readonly Regex rxQuotedStringLiteralPattern = new Regex(@"
                 # A quoted string consists of
    '            # * a lead-in delimiter, followed by
    (?<content>  # * a named capturing group representing the quoted content
      (          #   which consists of either
        [^']     #   * an ordinary, non-delimiter character
      |          #   OR
        ('')     #   * an escape sequence representing an embedded delimiter
      )*         #   repeated zero or more times.
    )            # The quoted content is followed by 
    '            # * the lead-out delimiter
    "
    , RegexOptions.ExplicitCapture|RegexOptions.IgnorePatternWhitespace
    ) ;

public static IEnumerable<string> ParseQuotedLiteralsFromStringUsingRegularExpressions( string s )
{
  for ( Match m = rxQuotedStringLiteralPattern.Match( s ?? "" ) ; m.Success ; m = m.NextMatch() )
  {
    string raw    = m.Groups[ "content" ].Value ;
    string cooked = raw.Replace( "''" , "'" ) ;
    yield return cooked ;
  }
}
于 2012-08-24T20:41:21.437 回答