首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用正则表达式匹配包含大量\r\n\f的字符串?

如何使用正则表达式匹配包含大量\r\n\f的字符串?
EN

Stack Overflow用户
提问于 2009-10-28 18:11:28
回答 3查看 603关注 0票数 0

我只想捕获单词"assignment“,当它在行的开头和行尾时,word.There可以是"assignment”单词后面的零个或多个空格字符,并且像:或#或-这样的字符可能会出现。

例如,下面的几行应该匹配

代码语言:javascript
运行
复制
Assignments

代码语言:javascript
运行
复制
Assignments :

代码语言:javascript
运行
复制
assignments                

其中,as、以下字符串不应匹配

代码语言:javascript
运行
复制
The details of various assignments that I have ...

我从一个包含两次“赋值”单词的文件中得到了下面这行。

代码语言:javascript
运行
复制
Ab Initio\r\r\a\r\a\v\r\r\fAssignments\rThe details of the various assignments that I 

我写了下面的正则表达式,但它不能捕获任何东西:

代码语言:javascript
运行
复制
^Assignments(\s|:|-|#)*?$

当我像下面这样编写正则表达式时,"assignment“的两个匹配项都被选中:

代码语言:javascript
运行
复制
Assignments(\s|:|-|#)*?($)?

有没有猜到?我该怎么办?为此,我使用了C#。

我的C#代码如下:

代码语言:javascript
运行
复制
RegEx  x = new Regex(@"^Assignments(\s|:|-|#)*?$", RegexOptions.IgnoreCase | RegexOptions.Multiline);

output = x.Replace(inputText, "@@@@@@@@@@@@@@@@\r\n<project_details>$&");
            if (x.IsMatch(inputText))
            {
                Match m = x.Match(inputText);

                Console.WriteLine("\n\n\t~~~~~~~~~~   match found ~~~~~~~~~~~");
                Console.WriteLine(m.Index +" : " + m.Value);
                Console.WriteLine("\n\n\n\n" + output);                
            }
            else
            {
                Console.WriteLine("$$$$$$$$$$$$$ no match  %%%%%%%%%%%%%%");
            }

刚才我重新检查了我的输入字符串。文件中的原始行如下:

代码语言:javascript
运行
复制
Assignments
The details of various assignmenths that I ...

但是当我将文件流加载到一个字符串变量中时,我得到了相同的代码行,如下所示:

代码语言:javascript
运行
复制
\r\r\a\r\a\v\r\r\fAssignments\rThe details of the various assignments that I

有人知道发生了什么吗?我应该如何表达我的正则表达式?请帮帮我!

EN

回答 3

Stack Overflow用户

发布于 2009-10-28 18:16:02

在您的正则表达式中使用RegexOptions.Multiline,这将更改^和$的含义以分别匹配行的开始/结束(而不是匹配整个字符串的开始/结束)。

票数 1
EN

Stack Overflow用户

发布于 2009-10-28 18:19:32

第一种解决方案适用于不区分大小写和多行的情况:

代码语言:javascript
运行
复制
Regex RegexObj = new Regex("^Assignments(\\s|:|-|#)*?$",
        RegexOptions.IgnoreCase | RegexOptions.Multiline);
票数 1
EN

Stack Overflow用户

发布于 2009-10-28 18:57:07

我将继续并假设您并不真的需要其中的换页符(\f),如果不需要,这将会起作用:

代码语言:javascript
运行
复制
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ScratchConsole
{
    class Program
    {
        private static string[] punctuationChars = new string[] 
        {
            ":",
            ";"
        };
        static void Main(string[] args)
        {
            string foo = "Ab Initio\r\r\a\r\a\v\r\rAssignments\rThe details of the various assignments that I";
            string[] split = foo.Split(new string[] { "\r" },StringSplitOptions.None);
            foreach (string s in split)
            {
                if (s.StartsWith("Assignments"))
                {
                    string temp = s.Remove(0, "Assignments".Length );
                    foreach (string c in punctuationChars)
                    {
                        temp = temp.Replace(c, "");
                    }
                    if (string.IsNullOrEmpty(temp.Trim()))
                    {
                        Console.WriteLine("it worked!");
                    }
                }
            }
            Console.Read();
        }
    }
}

我记得,有一句话是这样的:“有时候,有人遇到问题,他们决定使用正则表达式。现在他们有两个问题。”(不是实际的报价,但足够好:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1636300

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档