2016-05-12 2 views
0

У меня есть эта строка:Regex получить текст до и после дефиса

"Common Waxbill - Estrilda astrild" 

Как я могу написать 2 отдельные регулярные выражения для слов до и после дефиса? Выход я хочу это:

"Common Waxbill" 

и

"Estrilda astrild" 
+1

Почему бы вам не разделить строку с дефисом как разделителем? Нет необходимости в регулярном выражении. –

+0

Что вы хотите достичь? –

ответ

2

Если вы не можете использовать просмотровых задом, но ваша строка всегда находится в том же формате и cannout содержат больше, чем один дефис, вы могли бы использовать

^[^-]*[^ -] для первого и \w[^-]*$ для второго (или [^ -][^-]*$ если первый не пробел после дефиса не обязательно слово-символ

немного по мотивам:. ^[^-]*[^ -] соответствует началу строки (якорный ^), за которым следует любое количество символов, которые являются не дефис и, наконец, символ, который не является дефем или пространством (только для xclude последнее место из совпадения).

[^ -][^-]*$ тот же подход, но наоборот, сначала соответствие символа тот ни пространства, ни дефис, за которым следует любое количество символов, которые не являются не дефис и, наконец, конец строки (анкерной $). \w[^-]*$ в основном тот же, он использует более строгий \w вместо [^ -]. Это снова используется для исключения пробелов после дефиса из матча.

+0

Это работает для меня. Для моих собственных знаний вы можете объяснить, как работает [^ -] [^ -]? –

+1

Любопытно, как это могло бы работать, поскольку в первом была (небольшая) ошибка. Добавлено некоторое объяснение. –

4

Это довольно просто:

.*(?= -)  # matches everything before " - " 
(?<= -).* # matches everything after " - " 

Смотрите этот учебник по lookaround assertions.

+0

Когда я использовал код для сопоставления всего после получения этой ошибки: SyntaxError: Недопустимое регулярное выражение:/(? <= -). * /: Недействительная группа. Я использую расширение веб-скребка Chrome, которое использует js для своего регулярного выражения. –

+3

Javascript не имеет lookbehinds. –

 Смежные вопросы

  • Нет связанных вопросов^_^