需要您的帮助,在匹配一些数字模式使用正则表达式。我有数以千计的10位数的数字在下面的模式,需要提取他们根据他们的模式。
注意:我不需要中间的空格。
模式1:数字:3527 432 432让我们把上面的数字看作ABCD XYZ XYZ模式
模式二:编号:3527 89 89 89 ABCD XY XY XY
模式3:电话:0351 - 88888888传真:0351 - 88888888
图案4:5432 888 999 ABCD XXX YYY
图案五:5432 8888 99 ABCD XXXX YY
图案65432 33 44 22 ABCD XX YY ZZ
任何形式的帮助都非常感谢。
我是一个完整的正则表达式初学者,知道基本的东西。
对于5432 8888 99这样的模式
我正在使用正则表达式,如\d\d\d\d8888\d\d
然后通过将8888改变为其他数字(如1111)来手动地从列表中找到匹配的数字。
2条答案
按热度按时间dnph8jn41#
要检查相同的符号,可以使用backreferences。
简而言之,像
(.)\1
这样的正则表达式将匹配一行中的两个相同符号,而(.)(.)\1\2
将匹配像abab
这样的出现。以下是您案例的表达式:
\d{4}(\d{3})\1
\d{4}(\d{2})\1{2}
(\d{2})\1{2}\d{4}
\d{4}(\d)\1{2}(\d)\2{2}
\d{4}(\d)\1{3}(\d)\2
\d{4}(\d)\1(\d)\2(\d)\3
对第一个的解释:
\d{4}
匹配任何for数字,(\d{3})
匹配任意三个数字,并将它们捕获到组#1中,\1
匹配组#1的确切内容。我希望基于这个解释和对反向引用如何工作的一般描述,其他表达式应该非常清楚。
第一个here的演示。
xxls0lw82#
最简单的方法是为每种格式编写一个模式。
然后,在它们后面添加
|
字符。模式1和4。
模式2和6。
模式3.
模式5.
最后的模式是,
或者简化为
然后,您可以使用 Pattern 和 Matcher 类来获取每个值。
然后,使用 String#replace 方法删除空格。
这假定它们在文本中,并且每个都由其他字符分隔。
如果值是连续的而不是分隔的,我就不会依赖这种模式。
输出量
这里有一个链接到 Wikipedia 关于 * 正则表达式 * 的文章。