我想在给定字符串中选择文本块。这些文本块具有几乎相似的模式。 例如,在下面给出的文本中,我想捕获以“客户端”开头的行,即我想选择下面文本中给出的3个客户端的信息。 有时这些信息可能不是以“客户”一词开头,而是以“客户”或“项目名称”或“雇主”字样开头。
1. Client Name
The XXX Company
Title
Application Dev Office
Period
September 2008 Till date
Role
Quality Analyst Lead
Responsibilities
Testing
Client Name
The XYZ Company
Title
Application web
Period
September 2009 Till date
Role
Quality Tester Lead
Responsibilities
Testing and destroying
3) Client Name
The 1234 Company
Title
Application web RIA
Period
September 2209 Till date
Role
Quality Lead
Responsibilities
Developer
我为此创建了一个正则表达式,如下所示:
(\n|\r|\a|\f)(\s|\d|\.)*?
(?<id>(Client|Customer|Role|Organi(s|z)ation|Vendor|Company|Employer))
(\s|\S)*?(?=(\n|\r|\a|\f)(\s|\d|\.)*?(\k'id'))*?
我使用过(\n|\r|\a|\f)
因为当我将文件从文件加载到字符串变量时,^无法识别这些字符。
这个正则表达式的问题在于,它能够识别前两个客户端的信息,但是它无法识别最后一个客户端的信息。
任何人都知道如何为此开发正则表达式? 我正在使用C#。
提前致谢。
------------------ EDITED PART -------------------
我需要开发正则表达式,如果客户端相关信息以单词“client”开头,则查看是否存在“role”,“enviornment”,“vendor”之类的单词。如果存在这样的单词,那么只有我们可以说它是客户相关的信息。 但在某些情况下,这些信息可以从“雇主”等其他词开始。在这种情况下,我们仍然需要搜索“角色”,“环境”,“供应商”等词。 这就是我创建正则表达式
的原因(?<id>(Client|Customer|Role|Organi(s|z)ation|Vendor|Company|Employer))
如果单词“client”匹配,则除“client”之外的任何单词应在后续文本中匹配。 如果找到任何单词,则再次开始寻找“客户”。
答案 0 :(得分:0)
由于项目3上的“)”,你的正则表达式可能会失败。添加a)到正则表达式并且看起来很好:
(\n|\r|\a|\f)(\s|\d|\.|\))*?(?<id>(Client|Customer|Role|Organi(s|z)ation|Vendor|Company|Employer))(\s|\S)*?(?=(\n|\r|\a|\f)(\s|\d|\.)*?(\k'id'))*?
答案 1 :(得分:0)
这将抓取每个客户端块,如果这是你想要的:
Regex regexObj = new Regex("^[^A-Za-z]*Client(?:(?!^[^A-Za-z]*Client).)*", RegexOptions.Singleline | RegexOptions.Multiline);