Как мне создать регулярное выражение ICU для соответствия этому виду строки? - PullRequest
0 голосов
/ 09 декабря 2010

Привет, мне нужно регулярное выражение ICU, которое мне кажется довольно простым, но я не знаю, как его правильно построить. Регулярное выражение должно соответствовать строкам вроде:

font-size: 9pt;
font-size: 15pt;
font-size:2pt;
font-size:22pt;

Я пытаюсь сделать что-то подобное, но это не работает:

regex = \bfont\-size: [0-9]{3}pt;\b

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

P.S .: Кто-нибудь знает хороший ресурс, чтобы освоить этот пост?

Ответы [ 2 ]

1 голос
/ 09 декабря 2010

font\-size\: ?[0-9]{1,3}pt\;

Должен сделать свое дело. По сути, избегайте всех не алфавитно-цифровых символов (просто чтобы быть в безопасности). Кроме того, {1,3} означает повторение 0-9 от одного до трех раз, а не всегда три раза.

Edit: Обновлено вышеприведенное регулярное выражение. Конечный \b был удален, а пробел перед числом стал необязательным с помощью ?.

Демонстрация Python:

>>> import re
>>> s = """
... font-size: 9pt;
... font-size: 15pt;
... font-size:2pt;
... font-size:22pt;
... """
>>> re.findall("font\-size\: ?[0-9]{1,3}pt\;", s)
['font-size: 9pt;', 'font-size: 15pt;', 'font-size:2pt;', 'font-size:22pt;']
0 голосов
/ 09 декабря 2010

Я вижу две проблемы с вашим регулярным выражением:

  1. {3} соответствует ровно трем вещам.Вы, вероятно, хотите, чтобы {1,3} соответствовал от 1 до 3.

  2. Я не думаю, что \b будет делать то, что вы хотите, сразу после точки с запятой.Возможно, вам нужно что-то вроде \s* (ноль или более пробелов).

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...