2015-03-23 4 views
1

Я новичок в регулярном выражении. Я пытаюсь получить строки, которые точно имеют только 0.0.Регулярное выражение находит точное совпадение в строке

Я хочу, чтобы захватить эту строку

3/6/7 56 0.0 0 0 5 0.00 

Но не это

3/6/7 56 1.0 0 0 5 0.00 

Я попытался ^.*0\.0 регулярное выражение, но, к сожалению, оба матча строк.

ответ

0

Вы должны использовать \b слово граница, которая доступна в большинстве регулярных выражений вкусов:

^.*\b0\.0\b.*$

См example

Обратите внимание, что если вы используете его в Notepad ++, регулярное выражение выше достаточно, но в некоторых других приложениях вам может потребоваться указать параметр Multiline, чтобы он работал. Вы можете использовать встроенный оператор (?m): (?m)^.*\b0\.0\b.*$

Другое примечание: если вы имеете в виду только соответствовать строке, где 0.0 отделена от остальных только с пробелами (или строковые границы), для Вас использование this regex: (?:^.* |^)0\.0(?: .*$|$) или (^.* |^)0\.0(.*$|$) если ваш движок не поддерживает группы, не связанные с захватом.

+0

спасибо. Я дам эту попытку и дам вам знать. – Alex

+0

Спасибо Я пробовал это, и у меня нет возможности использовать?. – Alex

+0

О, а строка 0.0 разделена пробелами. – Alex

1

Вам нужно уйти от точки, поскольку это означает «любой символ» в RegEx. Чтобы соответствовать только линиям с одним вхождением, вы можете использовать негативный взгляд вперед.

^.*0\.0(?!0\.0) 

Looksaheads и задом не работают во всех средах RegEx, так что может быть, что это не вариант. Хорошим источником является страница http://www.regular-expressions.info/lookaround.html.

+0

Спасибо, извините, я написал это в своем вопросе, но он не опубликовал этот путь. Я попытался, но он все равно получает обе строки. – Alex

+0

Благодарим за информацию, которую я просмотрю и обнов. – Alex

+0

Спасибо Я пробовал это и не имею возможности использовать?. Я прочитаю ссылку, которую вы указали, чтобы посмотреть, есть ли альтернатива. – Alex

1

Вы должны использовать метасимволвокруг 0.0, чтобы указать, что этот термин не должен ограничиваться другими цифрами или буквами.

/\b0\.0\b/ 

EDIT:

Если ваш язык или регулярное выражение вкус не поддерживает \b, вот еще один вариант:

/(^|)0\.0(|$)/ 

В основном это требует, чтобы 0.0 быть ограничена пространством или в начале строка с левой стороны и пробел или конец строки с правой стороны.

+0

Спасибо, я попробовал это, и это не сработало. – Alex

+0

На каком языке вы используете? Возможно, '\ b' не поддерживается (или поддерживается корректно) на используемом вами языке. Вот [рабочий пример] (http://refiddle.com/refiddles/55109f9e75622d7800512100). –

+0

Я на маршрутизаторе Cisco. – Alex

0

Если ваша линия всегда выглядеть

3/6/7 56 0.0 0 0 5 0.00 

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

/^.* 0\.0 .*$/ 
Смежные вопросы