Java 如何使Regex前瞻性匹配一位数和两位数?
比如说,我有一个字符串,读着Java 如何使Regex前瞻性匹配一位数和两位数?,java,regex,regex-lookarounds,Java,Regex,Regex Lookarounds,比如说,我有一个字符串,读着“1this12string”。我想将String#split与使用lookahead的regex一起使用,这将为我提供[“1this”,“12string”] 我当前的语句是(?=\d),它对于一位数非常有效。我在修改此语句以同时包含1位和2位数字时遇到问题。在后面添加一个查找,这样您就不会在数字中拆分: (? 请参阅。如果确实要使用Regex Lookahead,请尝试以下方法: (\d{1,2}[^\d]*)(?=\d|\b) 请注意,这假设每个字符串拆分的
“1this12string”
。我想将String#split
与使用lookahead的regex一起使用,这将为我提供[“1this”,“12string”]
我当前的语句是
(?=\d)
,它对于一位数非常有效。我在修改此语句以同时包含1位和2位数字时遇到问题。在后面添加一个查找,这样您就不会在数字中拆分:
(?
请参阅。如果确实要使用Regex Lookahead,请尝试以下方法:
(\d{1,2}[^\d]*)(?=\d|\b)
请注意,这假设每个字符串拆分的前面必须有1或2个数字。如果不是这样,请让我们知道,以便我们可以进一步增强它
正则表达式逻辑
\d{1,2}
匹配前面的1或2位数字
[^\d]*
匹配前1位或前2位之后的非数字字符
- 将上述两个段括在括号()中,使其成为提取匹配文本的捕获组
(?=\d
以满足您使用Regex Lookahead的要求
|\b
允许匹配文本位于文本末尾(单词边界前)
我认为您也可以使用更简单的正则表达式来完成任务,而无需使用相对更复杂的功能,如正则表达式前瞻。例如:
\d{1,2}[^\d]*
您可以在中看到,这同样适用于您的示例输入。无论如何,如果您的要求超出此范围,请让我们知道如何对其进行微调。使用
String[]splits=String.split(“(?换句话说,您希望在(a)后面有数字的位置拆分,但同时您希望(b)如果前面有数字,则防止拆分,例如在“1 | 2string”
中用“1 | 2string”
标记的case-In-place。您已经有了(a)通过表示的条件(?=\d)
。要表示条件(b),可以使用类似(?)的负查找?。
\d{1,2}[^\d]*