Regex получает текст внутри - PullRequest
2 голосов
/ 14 октября 2011

Я пытался получить первое имя местоположения внутри предложений. Желаемое название местоположения будет точно начинаться со 2-й заглавной буквы первого предложения, а затем точно заканчиваться перед первой точкой (.)

Пример:

 It is located at Supreme Court. Follow by some other text. 
                  ^           ^

Желаемое место

Верховный суд

Извините, я не могу показать вам кусок кода, который у меня так далеко. После часа попыток я ничего не получил в бетоне.

Если вы покажете пример кода на Ruby, мы будем очень признательны.

Ответы [ 5 ]

4 голосов
/ 14 октября 2011

Это регулярное выражение:

regexp = /^.*?[A-Z].*?([A-Z].*?)\./
match = regexp.match(subject)
if match
    match = match[1]
else
    match = ""
end

будет выдавать: Supreme Court

Я начинаю с начала строки, совпадающей с первой заглавной буквой, игнорируя все остальное.Затем я сопоставляю 2-ю заглавную и сохраняю результат в обратной ссылке 1 до первой точки.

1 голос
/ 14 октября 2011
s = 'It is located at Supreme Court. Follow by some other text.'
m = s.match /[A-Z][^A-Z]+([A-Z][^\.]+)/
result = m[1] #Supreme Court
1 голос
/ 14 октября 2011

Это сработало для меня:

irb(main):001:0> location = "It is located at Supreme Court. Follow by some other text."
=> "It is located at Supreme Court. Follow by some other text."
irb(main):002:0> location.match(/[^A-Za-z][\bA-Z][\w\s]*\./)
=> #<MatchData "Supreme Court.">
0 голосов
/ 14 октября 2011

Предполагается, что в начале строки нет пробела, поэтому он ищет первую заглавную букву, которая идет сразу после пробела, и захватывает что-либо до первого найденного периода.

str = "It is located at Supreme Court. Follow by some other text."
m = str.match(/\s([A-Z].*?)\./)
location = m.nil? ? "" : m[1] #just in case there's no match

p location #=> Supreme Court
0 голосов
/ 14 октября 2011

Попробуйте это:

s = 'It is located at Supreme Court. Follow by some other text.'
/[A-Z].+?([A-Z].*)\..+?/.match(s)[1]
...