2012-07-05 189 views
0

我不擅长正则表达式,我可以使用一些帮助处理我正在处理的几个表达式。我有一行文字,例如Text here then 999-99,我希望在最后隔离该数字序列。它可以是999-99999-99-9。以下似乎工作:帮助正则表达式

\d{3}-\d{2}(-\d{1})? 

但我注意到,它真的只是似乎是在文本中的任何位置进行搜索,因为我可以在数字序列后添加文本,它仍然匹配。这需要更严格,以便该行必须以此确切的顺序结束,并且没有任何行后。我尝试以$而不是?结尾,但似乎从未创建过匹配项(它总是返回假)。

我也可以使用一些字符替换的帮助。我正在研究一个处理OCR扫描的程序,偶尔返回的字符串值包含不可显示的字符,由܀符号表示。是否有一个正则表达式将用空格替换܀个字符?

+0

的一端与'\ d {3} - \ d {2}( - \ d {1})$'这应该工作 – DonCallisto 2012-07-05 14:36:45

+0

优选你应该问一个单独的问题用于更换你的问题的一部分,并指出你正在使用哪种语言。 – 2012-07-05 14:42:56

+0

我应该澄清。当使用$而不是?时,它在我使用测试序列999-99-9时有效,但对于999-99不起作用。我需要它为两者工作,我认为它会使用括号。 – tjc59 2012-07-05 14:55:19

回答

3

试试这个正则表达式。

([\d-]+)$ 
1

使用单词边界元字符,\b

\b\d{3}-\d{2}(-\d)?\b 

您也可以从最近\d删除{1},因为它是多余的。

+0

如果数字序列后面还有其他文字,这仍然会返回匹配项。它必须是严格的,以便字符串必须以这个序列结束,并且在它之后没有任何结果。 – tjc59 2012-07-05 14:57:41

2

这应该工作。只需用$即可结束您的正则表达式。它代表线路

\d{3}-\d{2}(-\d{1})?$

+0

他特别说过使用'$'不适合他。 – vergenzt 2012-07-05 14:41:46

+0

我应该澄清。当使用$而不是?时,它在我使用测试序列999-99-9时有效,但对于999-99不起作用。我需要它为两者工作,我认为它会使用括号。 – tjc59 2012-07-05 14:55:32