2014-09-24 4 views
0

я хочу написать один регулярное выражение, которое будет фиксировать все, но компания достаточно (только LTD в примерах - Я знаю, как расширить это) Например:REGEX с смотреть вперед и смотреть зад

ABC   capture ABC 
ABC LTD  capture ABC 
ABC LTD UK  capture ABC UK 
LTD ABC  capture ABC 
LTD UK ABC  capture UK ABC 

I Я работаю в среде JAVA. До сих пор у меня есть (^.*?)(?=(?:LTD|LIMITED\s*)+), который работает только для ABC LTD (даже для ABC) Любая помощь здесь будет оценена по весу.

+0

Какой язык вы используете? –

+0

это встроенный, который использует синтаксис java – user2682459

ответ

1
(?!LTD|LIMITED)\b\w+\b 

Try this.See demo.

http://regex101.com/r/zR2tR4/4

+0

Это решило это точно – user2682459

+0

Фактически при ближайших проверках это не работает в случае ABC LTD UK, а также в случае с UK UK ABC – user2682459

+0

@ user2682459 Вы проверили демонстрацию .... все эти случаи работают – vks

-1

Не знаю синтаксиса Java точно, но я уверен, что он имеет собственные команды замены и разделения. Думайте, что гораздо эффективнее удалить сокращение компании, а затем расколоть.

код будет в C#, но я думаю, что это не очень трудно перенести его на Java

// it's not univesal but matches your sample 
string newString = Regex.Replace(baseString, "((LTD)|(LIMITED)|(JSC)...)",""); // remove all abbrevations without headache about Look-Forward-Back-And-So-On 
string[] companyNames = newString.Split("\n"); 

Во всяком случае - делать что-то с регулярным выражением - попытаться упростить его и избежать расширенных возможностей.

+0

Вам не нужно использовать все эти группы, вы можете удалить их или сохранить основную группу и добавить границы слов. –

+0

Нет необходимости –

+0

((LTD) | (LIMITED) | (JSC))! = (LTD | LIMITED | JSC) –

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