Regex 需要包含表达式后所有字符的正则表达式

Regex 需要包含表达式后所有字符的正则表达式,regex,scala,Regex,Scala,我在想一个正则表达式。它包括它后面的所有字符,但如果出现另一个模式,它不会重叠 这是我现在的正则表达式 [a-zA-Z]{2}\d{1}\s?\w? 模式总是2个字母后跟一个像AE1或BE3这样的数字,但我需要模式后面的所有字符 所以AE1是EF,但是如果字符串中出现另一个模式 AE1 A D BE1 A D C它不能与两个单独的匹配项重叠,也不能是两个单独的匹配项 所以我想澄清一下 AB3 D T B应该是正则表达式上的一个匹配项 ABC D A F DE3 D CD A 由于单词和数字是两个

我在想一个正则表达式。它包括它后面的所有字符,但如果出现另一个模式,它不会重叠

这是我现在的正则表达式

[a-zA-Z]{2}\d{1}\s?\w? 模式总是2个字母后跟一个像AE1或BE3这样的数字,但我需要模式后面的所有字符

所以AE1是EF,但是如果字符串中出现另一个模式 AE1 A D BE1 A D C它不能与两个单独的匹配项重叠,也不能是两个单独的匹配项

所以我想澄清一下 AB3 D T B应该是正则表达式上的一个匹配项

ABC D A F DE3 D CD A 由于单词和数字是两个字母,所以应该有2个匹配项和它后面的所有字符。
如何实现这一点

我并不完全遵循这里的逻辑,但我的猜测是,我们可能需要类似的东西:

([A-Z]{2}\d\s([A-Z]+\s)+)|([A-Z]{3}\s([A-Z]+\s)+)
允许两个字母后跟一个数字,或三个字母后跟[a-Z]+\s+


你必须考虑一下你的模式将从何处开始。我的意思是,你知道,在AE1ADBEADC中AE1AEF和BE1ADC有什么不同?你不想以同样的方式对待两者。所以你必须把它们分开。这两个文本的分离只有在确定哪个文本放在文本开头时才可能

总之,只有在模式开始时添加^才能解决问题

所以你的正则表达式应该是这样的:

^[a-zA-Z]{2}\d{1}\s?\w?
您可以使用以下正则表达式:

(?i)\b[a-z]{2}\d\b(?:(?:(?!\b[a-z]{2}\d\b).)+\s?)?
演示和说明:


它使用了消极的前瞻\b[a-z]{2}\d\b若要添加字符在初始模式后匹配的约束条件,i\b[a-z]{2}\d\b不应包含此确切模式。

您要做的是使用当前模式匹配作为提取子字符串开始的模式拆分字符串

你可以用

(?!^)(?=[a-zA-Z]{2}\d)
分开绳子。细节

?!^ - 不是在字符串的开头 ?=[a-zA-Z]{2}\d-字符串中紧跟2个ASCII字母和任意数字的位置。 见:


当只有DE3部分与您的描述相匹配时,字符串ABC D A F DE3 D CD A怎么可能有2个匹配项:2个字母后跟一个数字?这两个部分应该匹配什么?你能检查一下吗?我认为这正是你所需要的。你不会对第一次发生的事情施加任何限制。向前看。请参阅以正确使用令牌。
val s = "ABC D A F DE3 D CD A"
val rx = """(?!^)(?=[a-zA-Z]{2}\d)"""
val results = s.split(rx).map(_.trim)
println(results.mkString(", "))
// => ABC D A F, DE3 D CD A