Это может быть немного широкое соответствие, но вы можете использовать 2 группы захвата, используя \S
, что будет соответствовать непропущенному символу.Вы можете обновить его, чтобы он точно соответствовал тому, что вы хотите, чтобы сделать его более конкретным, используя, например, категории юникода .
Например, вы можете использовать класс символов [\p{L}\p{N}_!@#$%^&*[\]]
, чтобы соответствовать любомувид буквенно-цифровых символов, используя \p{L}
и \p{N}
, за которыми следуют специальные символы, которые вы разрешите.
В первой группе также захватите вторую группу, включая пробелы между ними, чтобы получить полное совпадение безконечные пробелы.
Во второй группе захватывает последнее слово.
(\S+\s+(\S+))\s*$
Пояснение
(
Группа захвата 1 \S+\s+
Совпадение 1+ без пробельных символов, совпадение с 1+ пробелами (\S+)
Захват группы 1, совпадение с 1+ без пробелов
)
Закрыть группу захвата $
Конец строки
Демонстрация регулярных выражений с \S
| .NET Демо со специальными символами