2015-11-25 4 views
0

Я новичок в регулярном выражении и много сделал для этого, но не могу понять.Regex соответствует строке, если это единственное в строке (кроме пробелов)

Мне нужно совместить строку (которая может содержать пробелы), давайте скажем Собака, но только в том случае, если она является единственным элементом на линии (за которым следует символ \ n). Например, мой входной файл может содержать следующее, но меня интересует только первый экземпляр The Dog (единственное, что на линии - это единственный способ отличить его от потенциальных других экземпляров):

The Dog 
    property 1 : 5 
    property 2 : depends on The Dog 
    property 3 : more data 

Где Собака появляется на линии сама по себе, ей может предшествовать пробел или нет.

Я нашел похожие вопросы, в которых ответы предлагают такие вещи, как (^ | []), чтобы проверить либо начало строки, либо предыдущее пространство, но все предложения, которые я нашел, соответствуют совпадению обоих экземпляров в мой пример.

Может ли кто-нибудь помочь? Благодарю.

+2

Вы можете добавить, что вы попробовали, а также регулярное выражение, что языка вы используете ? –

ответ

0

Вы можете использовать следующее:

^\s*The\s*Dog\s*$ 

См RegEx Demo

1

это действительно зависит от регулярных выражений аромата, который вы используете, но большинство из них позволяют m флаг, который гарантирует, что ^ и $ теги соответствуют началу и концу (соответственно) каждой строки. При этом, в сочетании с \s* потреблять любой, если вообще, пробелы, вы можете использовать следующее:

^\s*The\s*Dog\s*$ 

Regular expression visualization

Debuggex Demo

0

В JavaScript, вы могли бы сделать что-то вроде этого:

var doesMatch = (" The Dog").match(/^\s*The Dog\s*$/); 
if (doesMatch) { 
    //found a match 
} 
0

Спасибо большое, я использовал

^\ s В \ S Dog \ s * $

0

Потому что "Собака" является только примером в соответствии с изначальным постом, я wuld предлагаю использовать ^(?:\s*\w*)+\n. Это соответствует началу строки, затем оно соответствует 1 неограниченному повторению нулевого или неограниченного количества пробелов (\ s *), за которым следует ноль или неограниченное количество слов (\ w *), за которым следует разрыв строки. Из-за (?:) часть строки, которая соответствует, не будет захвачена. Это полезно, если вы хотите проверить, соответствует ли строка. Если вы хотите захватить, какая часть строки соответствует, используйте ^((?:\s*\w*))+\n.

Но, как указал «R Nar», это зависит от аромата регулярного выражения. Вышеупомянутое регулярное выражение будет работать в javascript, но, например, в python. Расскажите нам, на каком языке программирования вы пытаетесь соответствовать теме, и мы можем дать вам рабочий пример.

В случае, если вы используете JavaScript, вот как вы бы перебираем все матчи захватив часть строки, которая соответствует:

var myregexp = /^((?:\s*\w*)+)\n/g; 
var match = myregexp.exec(subject); 
while (match != null) { 
    // matched text: match[0] 
    // match start: match.index 
    // capturing group 1: match[1] 
    match = myregexp.exec(subject); 
} 
Смежные вопросы