我编写了一个小程序来通过文本文件查找并替换regex
其中9位数\d{9}
。它工作正常,除了我需要的更复杂一点。
我正确找到了正确的数据。 theFile
只是一个文本文件流入其中的字符串。我这样做然后创建并将其写入另一个文件。
但我需要单独找到每个字符串匹配,并将该匹配仅替换为该单个数字的最后5位数(目前这只是替换为FOUND)。保持文件不相同。
我不确定这样做的最佳方法是什么?我是否必须分成一个字符串数组而不是一个质量字符串? (这是一个非常大的文件)
任何问题让我知道,提前谢谢。
Dim regexString As String = "(\d{9})"
Dim replacement1 As String = "FOUND"
Dim rgx As New Regex(regexString)
Try
theFile = rgx.Replace(theFile, replacement1)
Catch
End try
答案 0 :(得分:2)
不是仅使用一个替换模式\d{9}
拆分和分组两种模式,第一个是4个数字长,第二个是5个数字。然后在替换中仅使用最后一组中的最后5个数字
Dim k = "abcd 123456789 abcf"
Dim ptn = "(\d{4})(\d{5})"
Dim result = Regex.Replace(k, ptn, "$2")
这种方法不会使连续数少于9的序列保持不变,但是如果你的序列超过9个并且不想更改它们,那么你需要一个模式
Dim ptn = "(\b\d{4})(\d{5}\b)"
将两个组固定在正好九个数字的序列中。
答案 1 :(得分:1)
问题似乎是要求正好九位数的匹配,并希望删除前四位。即用最后五位替换九位数。
将问题中的正则表达式拆分为两部分,对于不需要的部分和想要的部分给出
regexString = "\d{4}(\d{5})"
捕获所需的五位数,然后替换为
replacement1 ="$1"
或者在其他一些正则表达式实现中,它将是replacement1 ="\1"
。此外,某些正则表达式系统中的替换方法可能还有其他选项(参数),用于替换首先替换替换n次替换所有出现次数。
假设有超过九位数,只需要最后五位数。在这种情况下,正则表达式可以写为以下之一(因为不同的正则表达式语言支持不同的功能)。替换表达式与上述相同。
regexString = "\d{4,}(\d{5})"
regexString = "\d\d\d\d+(\d{5})"
regexString = "\d\d\d\d\d*(\d{5})"
由于正则表达式通常“贪婪”,\d{5}
应该始终与最后5位数匹配,但可能值得使用...(\d{5})([^\d]|$)
完成正则表达式并将替换更改为$1$2
。这样它就会查找尾随的非数字或字符串结尾。