RegEx 基于字符串结果抓取信息

Posted

技术标签:

【中文标题】RegEx 基于字符串结果抓取信息【英文标题】:RegEx grabbing information based on string results 【发布时间】:2018-09-27 22:51:34 【问题描述】:

我正在尝试从数据列表中获取用户名。数据以一种奇怪的格式保存,其中 3 个字符整数组成类似于下一个字段。在下面的数据中:

数据

129ABCDIEN ABCDHERS ABCDIT UABCU000 212 113P.O. BOX  106000 212 1182920 
LAKEABCD AVE.000 212 126ST. JOSEPH,  MI 41234-0132000 217 114(123) 983- 
12340000123 207 109PAGE    10000265 134From:    7/01/00     To:   
7/31/000000293 110Account #:123 1041106000 265 121Tax ID #: 123-12-1234000 
212 118SARITEIO SARICO JR000 212

我要选择

SARITEIO SARICO JR

数据中的常数是 TAX ID#: [21 character] 后跟 '000 212 ' 和名称的字符数。在本例中为 18 个字符。

,---- Normal String
|.,---- number of characters
|||                  |- End of the string
118SARITEIO SARICO JR000

目前我有字符数的选择,但我不确定如何重用选择来选择下一个变量

当前正则表达式:

/Tax ID #: .20(..)

我是 RegEx 的新手,所以任何正确方向的观点都会有所帮助。

我还可以使用 C# 中的任何功能。

【问题讨论】:

尝试Tax ID.18(?:\s*\d+)*((?i)[a-z]+(?:\s*[a-z]+)*)并访问第一个捕获组 @revo 太棒了,这行得通。您能在下面回答并解释这是如何工作的吗? 【参考方案1】:

按照您的规则,将有一个简单的正则表达式来匹配主题字符串中的所需模式:

Tax ID.18\s*\d3(?:\s*\d+)*((?i)[a-z]+(?:\s[a-z]+)*)

匹配敏感的Tax ID 后跟匹配 18 个字符(换行除外,因为我不确定您的数据是否包含换行)。它随后匹配可选的空格(包括换行符)和精确的3 数字,后跟可选的类似模式。接下来将匹配仅包含英文字母的单词序列。这个被捕获并设置了不区分大小写的标志(?i)

您只需要获得对第一个捕获组的访问权限。

Live demo

【讨论】:

以上是关于RegEx 基于字符串结果抓取信息的主要内容,如果未能解决你的问题,请参考以下文章

PHP使用RegEx获取字符串的子字符串

C:基于GNU regex(regex.h)regexec实现正则表达式多次匹配

为啥 Regex.Match 只返回 1 个结果?

使用 $regex 查询 mongoose 不返回任何结果

为啥 std::regex_match 会产生不同的结果

2020年寒假学习进度第十五天