Java 是否可以为正则表达式前瞻计数字符?
我正在尝试验证类似于以下内容的表达式:Java 是否可以为正则表达式前瞻计数字符?,java,regex,lookahead,Java,Regex,Lookahead,我正在尝试验证类似于以下内容的表达式: SEN 3 00000001 HT 12.60 39.50 使用模式SEN\\d{1}\\w{8}\\w{1,2}([-+]?[0-9]*\.?[0-9]*){1,2}。这种模式基本上是有效的。返回的组为 SEN 3 00000001 HT 12.60 当39.50丢失时。我想原因是因为我的模式中的最后一个数量条件({1,2})只满足于12.60 有没有一种方法可以根据\\w{1,2}的字符数量,使用lookaheads来设置满足要求所需的数量([-+
SEN 3 00000001 HT 12.60 39.50
使用模式SEN\\d{1}\\w{8}\\w{1,2}([-+]?[0-9]*\.?[0-9]*){1,2}
。这种模式基本上是有效的。返回的组为
SEN 3 00000001 HT 12.60
当39.50
丢失时。我想原因是因为我的模式中的最后一个数量条件({1,2}
)只满足于12.60
有没有一种方法可以根据\\w{1,2}
的字符数量,使用lookaheads来设置满足要求所需的数量([-+]?[0-9]*\.?[0-9]*.
)您几乎可以做到:)
您所犯的错误是将最后重复的空间留在组之外。因为在12.60和39.50之间有一个空格,所以除了12.60之外没有其他的对手
请尝试使用以下正则表达式:
SEN \\d{1} \\w{8} \\w{1,2}( [-+]?[0-9]*\\.?[0-9]*){1,2}
一些优化:
- 将()替换为(?:),因为它在量化时将被覆盖,除非是通过设计
- 用\d替换\d{1},它们是一样的
SEN \\d{1} \\w{8} \\w{1,2}( [-+]?[0-9]*\\.?[0-9]*){1,2}
一些优化:
- 将()替换为(?:),因为它在量化时将被覆盖,除非是通过设计
- 用\d替换\d{1},它们是一样的
演示+解释:用just
\\d{1}
替换\\d{1}
。用just\\d{1}
替换\\d{1}
。太棒了,感谢您的帮助!我怀疑我会发现这一点;太微妙了。太棒了,谢谢你的捕捉!我怀疑我会发现这一点;这太微妙了。