如何使用C#中的正则表达式解析作者信息?

如何使用C#中的正则表达式解析作者信息?,c#,regex,C#,Regex,我有以下案文: BATTLE HYMN OF THE TIGER MOTHER, by Amy Chua. (Penguin Press, $25.95.) A Chinese-American mother makes a case for strict and demanding parenting 我想使用正则表达式来解析: Title Author Publisher MSRP (Retail Price) Description 如何在C#中编写正则表达式来实现这一点?我认为可

我有以下案文:

BATTLE HYMN OF THE TIGER MOTHER, by Amy Chua. (Penguin 
Press, $25.95.) A Chinese-American mother makes a case for strict 
and demanding parenting
我想使用正则表达式来解析:

Title
Author
Publisher
MSRP (Retail Price)
Description

如何在C#中编写正则表达式来实现这一点?

我认为可能更简单的方法是:

  • 在“(“或”)上拆分
  • 左侧部分按“按”拆分
  • 中间部分用“,”分开
  • 右边是你的描述
使用string.Split()方法


这当然取决于模式的可靠性——正如上面的评论所提到的。

我认为可能更简单的方法是:

  • 在“(“或”)上拆分
  • 左侧部分按“按”拆分
  • 中间部分用“,”分开
  • 右边是你的描述
使用string.Split()方法


这当然取决于模式的可靠性——正如上面的评论所提到的。

刚刚看到的答案再次被允许。这是我推荐的正则表达式:

^(?<title>[\w\s]*), by (?<author>[\w\s]*)\. \((?<publisher>[\w\s]*), (?<msrp>.*)\.\) (?<description>.*)$
^(?[\w\s]*),由(?[\w\s]*)\\((?[\w\s]*),(?*)\.\)(?*)$
它将为上面的字段提供一个命名的捕获,并可在C#中使用,如下所示:

private void Main()
    {
        string input = "BATTLE HYMN OF THE TIGER MOTHER, by Amy Chua. (Penguin Press, $25.95.) A Chinese-American mother makes a case for strict and demanding parenting";

        string pattern = @"^(?<title>[\w\s]*), by (?<author>[\w\s]*)\. \((?<publisher>[\w\s]*), (?<msrp>.*)\.\) (?<description>.*)$";

        MatchCollection myMatchCollection = Regex.Matches(input, pattern);

        foreach (Match myMatch in myMatchCollection)
        {
            var title = myMatch.Groups["title"];
            var author = myMatch.Groups["author"];
            var publisher = myMatch.Groups["publisher"];
            var msrp = myMatch.Groups["msrp"];
            var description = myMatch.Groups["description"];
        }
    }
private void Main()
{
string input=“虎妈妈的战歌,艾米·蔡(Amy Chua)(企鹅出版社,25.95美元)。一位美籍华裔母亲为严格而苛刻的养育方式辩护”;
字符串模式=@“^(?[\w\s]*)、by(?[\w\s]*)\.\(?[\w\s]*)、(?.*)\.\)(?.*)$”;
MatchCollection myMatchCollection=Regex.Matches(输入,模式);
foreach(在myMatchCollection中匹配myMatch)
{
var title=myMatch.Groups[“title”];
var author=myMatch.Groups[“author”];
var publisher=myMatch.Groups[“publisher”];
var msrp=myMatch.Groups[“msrp”];
var description=myMatch.Groups[“description”];
}
}

刚刚看到答案又被允许了。这是我推荐的正则表达式:

^(?<title>[\w\s]*), by (?<author>[\w\s]*)\. \((?<publisher>[\w\s]*), (?<msrp>.*)\.\) (?<description>.*)$
^(?[\w\s]*),由(?[\w\s]*)\\((?[\w\s]*),(?*)\.\)(?*)$
它将为上面的字段提供一个命名的捕获,并可在C#中使用,如下所示:

private void Main()
    {
        string input = "BATTLE HYMN OF THE TIGER MOTHER, by Amy Chua. (Penguin Press, $25.95.) A Chinese-American mother makes a case for strict and demanding parenting";

        string pattern = @"^(?<title>[\w\s]*), by (?<author>[\w\s]*)\. \((?<publisher>[\w\s]*), (?<msrp>.*)\.\) (?<description>.*)$";

        MatchCollection myMatchCollection = Regex.Matches(input, pattern);

        foreach (Match myMatch in myMatchCollection)
        {
            var title = myMatch.Groups["title"];
            var author = myMatch.Groups["author"];
            var publisher = myMatch.Groups["publisher"];
            var msrp = myMatch.Groups["msrp"];
            var description = myMatch.Groups["description"];
        }
    }
private void Main()
{
string input=“虎妈妈的战歌,艾米·蔡(Amy Chua)(企鹅出版社,25.95美元)。一位美籍华裔母亲为严格而苛刻的养育方式辩护”;
字符串模式=@“^(?[\w\s]*)、by(?[\w\s]*)\.\(?[\w\s]*)、(?.*)\.\)(?.*)$”;
MatchCollection myMatchCollection=Regex.Matches(输入,模式);
foreach(在myMatchCollection中匹配myMatch)
{
var title=myMatch.Groups[“title”];
var author=myMatch.Groups[“author”];
var publisher=myMatch.Groups[“publisher”];
var msrp=myMatch.Groups[“msrp”];
var description=myMatch.Groups[“description”];
}
}
这样做:

^([ \w]+), by ([ \w]+). \(([ \w]+), ([$.\d]+)\) ([ \w-]+)$
您可以添加命名组以按名称或仅按索引提取匹配项。然而,除非您的源数据非常严格,否则这很可能非常脆弱

我也只针对这一个示例进行了说明,说明中有一个
-
,这是名称中一个特殊字符的示例,因此您可能希望确保按预期处理这些字符。

这样做:

^([ \w]+), by ([ \w]+). \(([ \w]+), ([$.\d]+)\) ([ \w-]+)$
您可以添加命名组以按名称或仅按索引提取匹配项。然而,除非您的源数据非常严格,否则这很可能非常脆弱


我也只针对这一个示例进行了说明,说明中有一个
-
,这是名称中一个特殊字符的示例,因此您可能希望确保按照预期处理这些字符。

您能提供您希望正则表达式匹配的示例输入和输出吗?您需要捕获任何内容吗?
(?这没有意义\)。
应该可以工作。您想要一个正则表达式来做什么?是否希望将标题、作者、出版商、价格和概要作为单独的字段捕获?那么请这样说。你应该对你的问题做更多的澄清。您想使用正则表达式来验证这样的字符串吗?您最好验证组成此字符串的各个组件(即,确保用户提供发布者、标题和作者,而不是保留任何空白。)@S..:字段是否总是可以通过以下标准区分?1.以逗号结尾的标题;标题中没有逗号。2.作者姓名始终以句号结尾,前面加上单词“by”3。Publisher和price始终位于括号中,用逗号分隔。发布者名称中不存在逗号。如果这些规则适用,您应该能够设计子字符串搜索或正则表达式匹配。您能否提供您希望正则表达式匹配的示例输入和输出?您需要捕获任何内容吗?
(?这没有意义\)。
应该可以工作。您想要一个正则表达式来做什么?是否希望将标题、作者、出版商、价格和概要作为单独的字段捕获?那么请这样说。你应该对你的问题做更多的澄清。您想使用正则表达式来验证这样的字符串吗?您最好验证组成此字符串的各个组件(即,确保用户提供发布者、标题和作者,而不是保留任何空白。)@S..:字段是否总是可以通过以下标准区分?1.以逗号结尾的标题;标题中没有逗号。2.作者姓名始终以句号结尾,前面加上单词“by”3。Publisher和price始终位于括号中,用逗号分隔。发布者名称中不存在逗号。如果这些规则适用,您应该能够设计一个子字符串搜索或正则表达式匹配。谢谢……这对我在q中提到的模式有帮助……我将尝试其他模式这很好,但在这个字符串模式中失败**滴答,由James Patterson和Michael Ledwidge编写。(小布朗,27.99美元)纽约侦探迈克尔·贝内特(Michael Bennett)在一位前同事的帮助下破获了一系列骇人听闻的犯罪案件