VB.Net初学者:用Wildcards替换,可能是RegEx?

时间:2014-02-12 15:02:39

标签: regex vb.net replace wildcard

我正在将文本文件转换为制表符分隔的文本文件,并遇到了一些障碍。除了一小部分外,我可以按照自己想要的方式获得所需的一切。

我正在使用的一个字段将主题的家庭地址作为单个条目(“1234 Happy Lane Somewhere,St 12345”)并且我需要按街道(Tab)城市(Tab)状态(Tab)分解)压缩。我挂掉的那一部分是State和Zip之间的Tab。

我一直在使用input = input.Replace,到目前为止它运行良好,但我想不出如何解开这个问题。我以前的通配符似乎不起作用,我不能用(“??”+ ControlChars.Tab +“#####”)替换(“?? #####”) ......老实说,我没想到会这么做,但这是我唯一的想法。

我已经阅读了一些关于使用Regex的内容,但是对它没有任何经验,而且看起来有点......压倒一切。

Regex是我最好的选择吗?如果没有,对于我可能错过的解决方案还有其他建议吗?

感谢您的时间。 :)

编辑:这是我到目前为止所使用的内容。它会对相关行进行一些编辑,处理空格,逗号和其他我不需要的文本,但我对State / Zip情况没有任何帮助;如果它不起作用,我有一个擦拭东西的坏习惯,但是如果那会有帮助的话,我会把我用过的最后一件事追加到最后。

If input Like "Guar*###/###-####" Then
input = input.Replace("Guar:", "")
input = input.Replace("  ", ControlChars.Tab)
input = input.Replace(",", ControlChars.Tab)
input = "C" + ControlChars.Tab + strAccount + ControlChars.Tab + input
End If

input = System.Text.RegularExpressions.Regex.Replace(" #####", ControlChars.Tab + "#####") <-- Just one example of something that doesn't work.

这是本例中输入的内容

"         Guar: LASTNAME,FIRSTNAME  999 E 99TH ST  CITY,ST 99999  Tel: 999/999-9999"

到目前为止,这是我能得到的结果

C   99999/9  LASTNAME   FIRSTNAME   999 E 99TH ST   CITY    ST 99999    999/999-9999

除了“ST 99999”之外,一切都正是我所需要的(实际数据明显省略了隐私和专业知识)。

更新:就在我认为这一切都被平方的时候,我还有另一个障碍。原始数据给了我这个。

#   TERMINOLOGY #########   ##/##/####  #   ###.##

最终的结果就是给了我这个,因为在我删除Tabs之前,这是一块很好的数据。现在我需要一种方法在它们被删除后替换它们,或者从文档范围的Tab种族灭绝中省略这一小组代码我用它来启动代码。

#TERMINOLOGY###########/##/########.##

rgx.Replace上的变体在这里效果最好吗?或者我可以将代码复制到变量,从文档中删除Tabs,然后插入变量而不会丢失标签吗?

1 个答案:

答案 0 :(得分:0)

我认为您正在寻找的是

Dim r As New System.Text.RegularExpressions.Regex(" (\d{5})(?!\d)")
Dim input As String = rgx.Replace(input, ControlChars.Tab + "$1")

第一行编译正则表达式。 \d匹配一个数字,您可以猜测{5}匹配前一个原子的5次重复。围绕\d{5}的括号称为捕获组,并负责将捕获的内容放入名为$1的伪变量中。 (?!\d)是一个更高级的概念,被称为否定先行断言,它基本上会查看下一个字符,以检查它不是一个数字(因为它可能是一个6或者 - 更多位数,前5个碰巧匹配)。另一个版本是

" (\d{5})\b"

其中\b字边界,不允许使用数字后面的字母数字字符。

相关问题