我需要从字符串中提取以下模式,并根据输入返回一个可能的匹配项。
我使用正则表达式,通过不同的可能性,但我没有得到预期的结果:
输入a): 71346 G249 USD 70045620 27/08/2020 001 / 004
输入b): 71346 G249 USD 70045620/2020 27/08/2020 001 / 004
试试看
String result = data.replaceFirst ( "(.*?([0-9]{6,}\\/[0-9]{4}).*)|(.*?([0-9]{6,}).*)", "$1" );
试试两个
String result = data.replaceFirst ( ".*?([0-9]{6,}\\/[0-9]{4})|([0-9]{6,}).*", "$1" );
试试三个
String result = data.replaceFirst ( ".*?([0-9]{6,})([0-9]{6,}\\/[0-9]{4}).*", "$1" );
根据输入的预期结果:
输入a): 70045620
输入b): 70045620/2020
3条答案
按热度按时间ix0qys7i1#
我会用
String#replaceAll
此处为:这张照片:
gc0ot86w2#
以这种方式使用另一种捕获组的方法将根据数据提供不同的组号。如果您想在替换中使用单个组,可以将第二部分设置为可选。
查看java演示
输出
您还可以找到匹配项,而不是使用replacefirst。
例如
查看另一个java演示
输出
k4aesqcs3#
就我个人而言,我会避免使用正则表达式。你好像只想要第四个字。类似于string.split()的东西可能会很好:
上述程序将输出:
70045620
对于第一个输入和70045620/2020
第二次。