解析带有奇怪格式条目的 SQL 查询报告
Parsing a SQL Query Report with Bizarrely Formatted Entries
我目前正在编写一个 C# 程序,该程序解析 SQL 服务器查询报告以获取数据,然后将其保存以备后用。到目前为止,我一直在解析的查询非常简单,但我刚刚收到一个包含此条目的测试文件:
Client Contact Client Email
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Primary: Nelli Quiroga
, nelli.quiroga@parservicios.com
Secondary: Zully Aranda, zully.aranda@parservicios.com
nelli.quiroga@parservicios.com|zully.aranda@parservicios.com
(请原谅格式 - 这正是查询输出的方式。)
我需要能够提取主要和次要客户端的名称和电子邮件地址,然后将其存储在 List<Tuple<string, string>>
中。到目前为止,我还没有能够设计出一种解决方案来有效地完成它,如果有的话。我最好的猜测是我必须以某种方式使用 Regex,但我不熟悉 Regex 在 C# 中的工作方式,而且我的 regex 技能很生疏。
一些附加信息:
- 我无权访问数据库,因此无法更改格式。
- 我不知道查询结果can/will是否包含多个这样的条目。因此,我希望解析器能够处理这些条目中的多个(如果存在的话)。
此条目将成为包含其他 table 查询的查询报告的一部分,谢天谢地,这些查询的格式如下:
User_Name Group_Name
-------------------------------------------------- --------------------------------------------------
msteffl NULL
spurcell Admin
wgervais Admin
djames Admin
loaduser Admin
mbreu Admin
wgervais ComplianceContractors
wgervais ComplianceOfficers
sgregory ComplianceOfficers
ntabares ComplianceOfficers
lduffaut ComplianceOfficers
pdeneree ComplianceOfficers
serickson ComplianceOfficers
mbreu ComplianceOfficers
jreinhardt ComplianceOfficers
jromoser ComplianceOfficers
ebell ComplianceOfficers
bkeogh ComplianceOfficers
cbarnett ComplianceOfficers
cbarnett Users
bkeogh Users
ebell Users
djames Users
jromoser Users
jreinhardt Users
mbreu Users
serickson Users
pdeneree Users
lduffaut Users
ntabares Users
sgregory Users
spurcell Users
wgervais Users
我们将不胜感激。
好吧,经过反复试验,我能够编写一个正则表达式,它可以很好地处理给我提供的联系人输出。我不能保证它能很好地与 任何 输出文件一起工作 can/will,但现在它做了我需要它做的事情。
这是有问题的正则表达式:
(?:Primary|Secondary):[ ]*[\r\n]*[a-zA-Z ]+[\r\n]*[ ]*,[ ]*[\r\n]*[a-zA-Z0-9.-]+@[a-zA-Z0-9.-]+\.[a-z]+[ ]*[\r\n]*
它能够将条目分成两部分,主要联系人和次要联系人,这样我就可以 trim 并根据需要拆分每个联系人。
同样,我不能肯定地说这适用于任何给定的输入,但我也认为我已经设法使其相当安全,因此 [ ]*
和 [=12= 的所有实例].
我目前正在编写一个 C# 程序,该程序解析 SQL 服务器查询报告以获取数据,然后将其保存以备后用。到目前为止,我一直在解析的查询非常简单,但我刚刚收到一个包含此条目的测试文件:
Client Contact Client Email
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Primary: Nelli Quiroga
, nelli.quiroga@parservicios.com
Secondary: Zully Aranda, zully.aranda@parservicios.com
nelli.quiroga@parservicios.com|zully.aranda@parservicios.com
(请原谅格式 - 这正是查询输出的方式。)
我需要能够提取主要和次要客户端的名称和电子邮件地址,然后将其存储在 List<Tuple<string, string>>
中。到目前为止,我还没有能够设计出一种解决方案来有效地完成它,如果有的话。我最好的猜测是我必须以某种方式使用 Regex,但我不熟悉 Regex 在 C# 中的工作方式,而且我的 regex 技能很生疏。
一些附加信息:
- 我无权访问数据库,因此无法更改格式。
- 我不知道查询结果can/will是否包含多个这样的条目。因此,我希望解析器能够处理这些条目中的多个(如果存在的话)。
此条目将成为包含其他 table 查询的查询报告的一部分,谢天谢地,这些查询的格式如下:
User_Name Group_Name -------------------------------------------------- -------------------------------------------------- msteffl NULL spurcell Admin wgervais Admin djames Admin loaduser Admin mbreu Admin wgervais ComplianceContractors wgervais ComplianceOfficers sgregory ComplianceOfficers ntabares ComplianceOfficers lduffaut ComplianceOfficers pdeneree ComplianceOfficers serickson ComplianceOfficers mbreu ComplianceOfficers jreinhardt ComplianceOfficers jromoser ComplianceOfficers ebell ComplianceOfficers bkeogh ComplianceOfficers cbarnett ComplianceOfficers cbarnett Users bkeogh Users ebell Users djames Users jromoser Users jreinhardt Users mbreu Users serickson Users pdeneree Users lduffaut Users ntabares Users sgregory Users spurcell Users wgervais Users
我们将不胜感激。
好吧,经过反复试验,我能够编写一个正则表达式,它可以很好地处理给我提供的联系人输出。我不能保证它能很好地与 任何 输出文件一起工作 can/will,但现在它做了我需要它做的事情。
这是有问题的正则表达式:
(?:Primary|Secondary):[ ]*[\r\n]*[a-zA-Z ]+[\r\n]*[ ]*,[ ]*[\r\n]*[a-zA-Z0-9.-]+@[a-zA-Z0-9.-]+\.[a-z]+[ ]*[\r\n]*
它能够将条目分成两部分,主要联系人和次要联系人,这样我就可以 trim 并根据需要拆分每个联系人。
同样,我不能肯定地说这适用于任何给定的输入,但我也认为我已经设法使其相当安全,因此 [ ]*
和 [=12= 的所有实例].