C# 根据正则表达式检查文件行

C# 根据正则表达式检查文件行,c#,.net,regex,windows,C#,.net,Regex,Windows,我正在使用Regex.Match方法在文件中查找一个信用卡号码,以符合PCI标准 我通过文件的strLine行进行交互,并对照regex m_stregex检查每一行: Regex.Match(strLine, m_strRegEx) string strLine = "4111111111111111" 这很好,但是如果行包含其他字符,例如strLine may=: string strLine = "fhj*4111111111111111op)" 然后正则表达式不会拾取cc编号,如何

我正在使用Regex.Match方法在文件中查找一个信用卡号码,以符合PCI标准

我通过文件的strLine行进行交互,并对照regex m_stregex检查每一行:

Regex.Match(strLine, m_strRegEx)

string strLine = "4111111111111111"
这很好,但是如果行包含其他字符,例如strLine may=:

string strLine = "fhj*4111111111111111op)"
然后正则表达式不会拾取cc编号,如何克服此问题

我使用的正则表达式是:

^4[0-9]{12}(?:[0-9]{3})?$

这是因为正则表达式以“^”和$锚定到字符串的开头和结尾。这意味着整个字符串必须匹配正则表达式,而不仅仅是子字符串

从正则表达式中删除“^”和“$”以执行子字符串匹配:

4[0-9]{12}(?:[0-9]{3})?
快速测试:

PS> 'fhj*4111111111111111op)' -match '4[0-9]{12}(?:[0-9]{3})?'; $Matches
True

Name                           Value
----                           -----
0                              4111111111111111

应移除锚定:

4[0-9]{12}(?:[0-9]{3})?

由于正则表达式以“^”开头,以$结尾,这意味着匹配必须从行的开始到结束。只需从正则表达式模式中删除这些字符,它就可以按照您的要求工作。

首先,向我们显示您的正则表达式,而不是匹配的代码。@minitech,上面已更新。为什么您有一个包含信用卡号的文件?必须同意@Nick Bray的意见@NickBray:支付卡行业数据安全标准PCI旨在控制敏感持卡人数据的暴露。尽管我对OP的意图一无所知,但我建议他尝试检查文档是否包含敏感数据,例如卡号,并发出是否包含的信号。反正我也不会这么怀疑。