регулярний вираз: збігайте будь-яке слово до першого пробілу


145

У мене є такий рядок:

hshd    household   8/29/2007   LB

Я хочу співставити все, що з’явиться перед першим пробілом (пробіл). Отже, в цьому випадку я хочу повернутися

hshd

2
Що поганого в розщепленні та отриманні першого елема?
Авінаш Радж

Відповіді:


319
([^\s]+)

працює


21
Я б ще надав ^, щоб отримати лише перше слово
soulmerge

1
Хоча, як правило, правильно, я вважаю, що потреба ^залежить від конкретних мовних реалізацій або повторного вираження. наприклад, в Python, який ви використовуєте re.matchдля цього завдання.
SilentGhost

5
Це відповідає всім словам, а не лише першому. Дивіться цей приклад .
Райан Гейтс

1
@RyanGates скасує вибір "Глобальний", і ви побачите, що він працює за призначенням і очікуваним. Якщо у вас все ще виникають проблеми, зверніться до SilentGhost щодо приміток щодо мовної реалізації.
Volvox

1
@Volvox Спасибі, я це пропустив.
Райан Гейтс


12

Можливо, ви могли б спробувати ([^ ]+) .*, що повинно дати вам все до першого бланку у вашій першій групі.


@ire_and_curses в піднесеному тексті, який пропустить останнє слово в рядку. Чомусь це не так: ([^]) +
hello_there_andy




1

Я думаю, слово було створене з кількома літерами. Моя пропозиція:

[^\s\s$]{2,}

-2

^ ([^ \ s] +) використовувати це, воно правильно відповідає лише першому слову, ви можете протестувати це за допомогою цього посилання https://regex101.com/


випливає з цієї відповіді.
Даршан

Потім поясніть, чому ви вважаєте, що потрібна нова відповідь, і поясніть будь-яку можливу різницю; але ви виявите, що це вже обговорюється в коментарях до прийнятої відповіді. Крім того, друга відповідь, що найбільше голосує, є досить схожою, але дещо елегантнішою, оскільки вона надає перевагу більш простому, \Sніж рівноцінному, але незграбному [^\s].
тріплей
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.