检查文件的行与正则表达式

时间:2012-01-30 15:15:56

标签: c# .net regex windows

我正在使用Regex.Match方法在文件中查找信用卡号(用于PCI合规性)

我通过文件的行(strLine)进行交互并检查每个文件与正则表达式(m_strRegEx):

Regex.Match(strLine, m_strRegEx)

string strLine = "4111111111111111"

这样可以正常工作,但如果该行包含其他字符,例如strLine可能=:

string strLine = "fhj*4111111111111111op)"

正则表达式然后没有选择cc号码,怎么可能克服这个问题呢?

我正在使用的正则表达式是:

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

3 个答案:

答案 0 :(得分:5)

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

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

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

快速测试:

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

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

答案 1 :(得分:4)

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

答案 2 :(得分:1)

你应该删除锚点:

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