正则表达式字符串替换文件中的单个匹配

时间:2014-06-12 15:16:51

标签: regex vb.net expression

我编写了一个小程序来通过文本文件查找并替换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  

2 个答案:

答案 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 。这样它就会查找尾随的非数字或字符串结尾。