我正在将文本文件转换为制表符分隔的文本文件,并遇到了一些障碍。除了一小部分外,我可以按照自己想要的方式获得所需的一切。
我正在使用的一个字段将主题的家庭地址作为单个条目(“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,然后插入变量而不会丢失标签吗?
答案 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
是字边界,不允许使用数字后面的字母数字字符。