我在XML消息中有一个信用卡号,我想使用正则表达式来查找信用卡号并加密它。所有数字都是16个字符长,并且它们并不总是在xml中的相同位置,所以基本上我认为我只需要找到一个16个字符的字符串并解密它,但我不确定如何。
示例:
<Message>
<PaymentInfo>
<CCNumber>333333333333333</CCNumber>
</PaymentInfo>
</Message>
另一种方式可能是:
<Message>
<CardInfo>
<CreditNumber>333333333333333</CreditNumber>
</CardInfo>
</Message>
这个解决方案是否有效,但它在VB中,因为原始代码是VB。
Public Shared Function EncryptXmlLog(xml As String) As String
'Get possible credit card numbers (13 - 16 characters)
Dim creditCardNumbers As MatchCollection = Matches(xml, "\b\d{13,16}\b")
For Each creditCardNumber As RegularExpressions.Match In creditCardNumbers
xml = xml.Replace(creditCardNumber.Value, Encrypt(creditCardNumber.Value))
Next
Return xml
End Function
答案 0 :(得分:4)
(\d{16}|\d{15}|\d{13})
将匹配任何数字集16,15或13
但是我必须知道为什么在解析之前不要只是通用XML文档。如果有多个文档,您应该有一个类型的条件解析器。
答案 1 :(得分:2)
尝试:
var match = Regex.Match(xmlStrin, @">(\d{16})<");
var number = match.Groups[1].Value;