Нужно регулярное выражение, которое включает в себя все символы после выражения - PullRequest
2 голосов
/ 17 июня 2019

Я пытаюсь выяснить регулярное выражение. Это включает в себя все символы после него, но если встречаются другие шаблоны, они не перекрываются

Это мое текущее регулярное выражение

[a-zA-Z]{2}\d{1}\s?\w?

В шаблоне всегда 2 буквы, за которыми следует число типа AE1 или BE3, но мне нужны все символы, следующие за шаблоном.

Итак, AE1 A E F, но если в строке встречается другой шаблон, например AE1 A D BE1 A D C не может перекрываться и быть двумя отдельными совпадениями.

чтобы уточнить AB3 D T B должно быть одно совпадение с регулярным выражением

ABC D A F DE3 D CD A должно иметь 2 совпадения со всеми последующими символами из-за двухбуквенного слова и числа. Как мне этого добиться

Ответы [ 4 ]

3 голосов
/ 17 июня 2019

Смотри, ты должен подумать, где начнется твой паттерн. Я имею в виду, вы знаете, что отличается от AE1 A E F и BE1 A D C в AE1 A D BE1 A D C? Вы не хотите относиться к обоим одинаково. Таким образом, вы должны разделить их. Разделение этих двух текстов возможно только при определении того, какой из них помещен в начало текста.

В целом, только добавление ^ для запуска вашей модели решит проблему.

Итак, ваше регулярное выражение должно быть таким:

^[a-zA-Z]{2}\d{1}\s?\w?

Демо

1 голос
/ 17 июня 2019

Вы можете просто использовать это регулярное выражение:

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

Демонстрация и объяснения: https://regex101.com/r/DtFU8j/1/

Он использует отрицательный прогноз (?!\b[a-z]{2}\d\b), чтобы добавить ограничение, которому соответствует символ послеисходный шаблон (?i)\b[a-z]{2}\d\b не должен содержать этот точный шаблон.

1 голос
/ 17 июня 2019

Я не совсем следую логике здесь, но я думаю, что мы могли бы хотеть что-то похожее на это:

([A-Z]{2}\d\s([A-Z]+\s)+)|([A-Z]{3}\s([A-Z]+\s)+)

, который допускает две буквы, за которыми следует цифра, или три буквы, за которыми следует ([A-Z]+\s)+.

Демо

0 голосов
/ 17 июня 2019

Что вы хотите сделать, это разделить строку с вашим шаблоном, имеющим текущее совпадение с шаблоном в качестве начала извлеченных подстрок.

Вы можете использовать

(?!^)(?=[a-zA-Z]{2}\d)

, чтобы разделитьстрока. Подробности

  • (?!^) - не в начале строки
  • (?=[a-zA-Z]{2}\d) - место в строке, за которым сразу следуют 2 буквы ASCIIи любая цифра.

См. демонстрационную версию Scala :

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...