0

我有一个句子,在句子的开头和结尾之间可以包含任何特殊字符或数字或字母,但不能包含单词。

为了更清楚地说明我的观点,我在下面举例说明:

我有一句话像"Today's Market value 0.5 percent"

现在从上面的“市场价值”和“百分比”之间的句子中,我不能得到任何其他词。

Statements allowed:
1) "Today's Market value*    0.5 percent"
2) "Today's Market value\1   0.5 percent"
3) "Today's Market value \1 0.5 percent"
4) "Today's Market value e   0.5 percent"
5) "Today's Market value 0.5 percent"

Statements not allowed:
1) "Today's market value is    0.5 percent"
2) "Today's market value  is 0.5 percent"

3) "Today's Market value is 0.5 percent"

我主要感兴趣的是在这里捡起市场价值,即“0.5”。

请建议我建立一个正则表达式来完成我的上述要求的正确方法。

4

2 回答 2

0

如果字符串正常,以下是提取感兴趣数量的代码:

string[] strList = new[] {
    @"Today's Market value*    0.5 percent",
    @"Today's Market value\1   0.5 percent",
    @"Today's Market value \1 0.5 percent",
    @"Today's Market value e   0.5 percent",
    @"Today's Market value 0.5 percent",
    @"Today's market value is    0.5 percent",
    @"Today's market value  is 0.5 percent",
    @"Today's Market value is 0.5 percent"
};
foreach (string str in strList)
{
    Match m = Regex.Match(str, @"(?<=Market value.*\s)(?<!Market value.*[a-zA-Z]{2}.*)\d+(\.\d+)?(?=\s.*percent)(?!.*[a-zA-Z]{2}.*percent)", RegexOptions.Singleline);
    if (m.Success)
        Console.WriteLine("{0} : {1}", m.Value, str);
}

输出:

0.5 : Today's Market value*    0.5 percent
0.5 : Today's Market value\1   0.5 percent
0.5 : Today's Market value \1 0.5 percent
0.5 : Today's Market value e   0.5 percent
0.5 : Today's Market value 0.5 percent

基本思想:数字前面应该有市场价值文本、任何东西空格,但不应该在任何地方有市场价值 + 2 个或更多连续字母。此外,数字后应跟空格任何内容百分比文本,但不应在任何位置跟 2 个或更多连续字母 + percent

于 2014-04-07T08:07:55.387 回答
0

试试这个正则表达式:

\bMarket value\b(?!\s+is\s)[\s\S]*?(\d+(?:\.\d+)?)\s*percent\b

(?!\s+is\s)是负前瞻,检查.is之后是否没有Market value

在线演示

于 2014-04-07T07:57:11.050 回答