У меня есть эти строки:
Я хочу иметь регулярное выражение, которое соответствует приведенным выше строкам и дает мне результат Antonio Mario
для первой строки и Giovanni Luigi
для второй.
Если я использую (.*)inflicted
в качестве шаблона, я получаю:
Спасибо.
Используйте ^(\S+).*inflicted
. См. демо.
Но если у меня есть эта ситуация, Антонио Марио нанес Джованни Луиджи. Я получу только Антонио и Джованни, но я хочу Антонио Марио и Джованни Луиджи.
([\w ]+)нанес|([\w ]+) нанес
возможно ли получить результат только для одной группы вместо двух разных групп?
@AhmedAbdelhameed Спасибо за информацию. Однако ОП не упомянул Java и не привел пример. (Вот почему я предложил удалить тег).
@FranzHuber23 Рекомендуется использовать другой тег с [regex]. Когда вы это делаете, подразумевается, что шаблон должен быть совместим с языком/инструментом, используемым в качестве «другого тега».
@ Джан Разве ты не упоминал, что они у тебя в двух отдельных строках? Если да, то вам подойдет и шаблон Виктора, и мой. Вам просто нужно использовать многострочный флаг.
Если имя не содержит пробелов, то вам нужно искать первый пробел вместо слова «нанесено». Я бы попробовал что-то вроде
^(.*?)\s.*?$
Вы можете просто протестировать регулярные выражения онлайн, например, с помощью https://regex101.com/.
РЕДАКТИРОВАТЬ
В зависимости от вашего комментария в имени возможны также пробелы. Поэтому мы не можем искать первое появление пробела. Вместо этого попробуйте использовать
^(.*?)(\shas)?\sinflicted$
Примечание: имя, оканчивающееся на "has", может быть обрезано. С этими строками только в качестве входных данных вы не можете определить, является ли это частью имени или нет.
^(\w+).*[ ]inflicted
?