Правильное написание regexp |
Здравствуйте, гость ( Вход | Регистрация )
Правильное написание regexp |
AD |
28.8.2008, 18:02
Сообщение
#11
|
Профессионал Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: 17 |
|
|
|
Litkevich Yuriy |
28.8.2008, 18:06
Сообщение
#12
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
смысл помоему не поменялся.
Т.е. анализатор "_" не находит, а "C_OFF" находит |
|
|
AD |
28.8.2008, 18:22
Сообщение
#13
|
Профессионал Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: 17 |
|
|
|
Tonal |
29.8.2008, 8:54
Сообщение
#14
|
Активный участник Группа: Участник Сообщений: 452 Регистрация: 6.12.2007 Из: Новосибирск Пользователь №: 34 Спасибо сказали: 69 раз(а) Репутация: 17 |
Ужос! Ты бы прочитал что-нибудь по регэкспам, стало бы жить сильно проще. Краткое описание: Это описание может содержать неточности, для уточнения смотри ассистента! Конструкция [что-то здесь] - это всегда 1 символ. Она может включать явное перечисление символов, указание диапазона символов (например a-z означает любой символ начиная с a и оканчивая z), групповые символы (например \d - эквивалентно 0-9, а \s - любой из пробельных символов, \w - любой из символов слова). Кроме того, если сразу после открывающей скобки стоил символ ^, конструкция инвертируется, и означает 1 любой символ кроме указанных. Да, некоторые специальные символы внутри конструкции меняют своё значение. Например . обозначает именно точку а не все символы. \b символ забоя (вроде '\07')... Теперь сам можешь разобрать что ты написал. Про задачу. Давай ты вообще без регекспов, на человеческом языке напишешь чего тебе нужно? Например: У меня есть строка содержащая такое (примеры). Я хочу, сделать с ней что-то (например выбрать все числа, или числа и спец-значения, или убрать ненужные символы...) И вместе подумаем как это проще и понятнее реализовать. |
|
|
AD |
29.8.2008, 10:09
Сообщение
#15
|
Профессионал Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: 17 |
Цитата Ужос! Ты бы прочитал что-нибудь по регэкспам, стало бы жить сильно проще. Краткое описание: Это описание может содержать неточности, для уточнения смотри ассистента! Конструкция [что-то здесь] - это всегда 1 символ. Она может включать явное перечисление символов, указание диапазона символов (например a-z означает любой символ начиная с a и оканчивая z), групповые символы (например \d - эквивалентно 0-9, а \s - любой из пробельных символов, \w - любой из символов слова). Кроме того, если сразу после открывающей скобки стоил символ ^, конструкция инвертируется, и означает 1 любой символ кроме указанных. Да, некоторые специальные символы внутри конструкции меняют своё значение. Например . обозначает именно точку а не все символы. \b символ забоя (вроде '\07')... Теперь сам можешь разобрать что ты написал. Про задачу. Давай ты вообще без регекспов, на человеческом языке напишешь чего тебе нужно? Например: У меня есть строка содержащая такое (примеры). Я хочу, сделать с ней что-то (например выбрать все числа, или числа и спец-значения, или убрать ненужные символы...) И вместе подумаем как это проще и понятнее реализовать. Мне необходимо удалять из строки все символы, которые не относятся к:
Что значит символы забоя? Если честно, я просто не понимаю некоторых спец. терминов, можно пояснить, пожалуйста? Я по-диагонали читал ассистент. Там про \b написано: Цитата \b - A word boundary. For example the regexp \bOK\b means match immediately after a word boundary (e.g. start of string or whitespace) the letter 'O' then the letter 'K' immediately before another word boundary (e.g. end of string or whitespace). But note that the assertion does not actually match any whitespace so if we write (\bOK\b) and we have a match it will only contain 'OK' even if the string is "It's OK now". Потому, я и решил, что можно использовать эти конструкции. Спасибо за ответ, содержащий разумную критику! Буду ждать помощи в правильно решении этой задачи!!! |
|
|
Litkevich Yuriy |
29.8.2008, 10:48
Сообщение
#16
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
символы забоя? онже backspase, переход на символ назад с затиранием символапро \b написано: это когда он не в квадратных скобках, см. тут (PDF)
|
|
|
Tonal |
29.8.2008, 12:15
Сообщение
#17
|
Активный участник Группа: Участник Сообщений: 452 Регистрация: 6.12.2007 Из: Новосибирск Пользователь №: 34 Спасибо сказали: 69 раз(а) Репутация: 17 |
1) Про символ '\b' нужно читать не в ассистенте, а в учебнике по С/С++ там же где и про символ '\n'
2) Когда в С/С++ пишешь регулярку нужно помнить об отслешивении слешей. Т.е. если в документации написано, что конструкция \b это граница слова, а ты хочешь найти скажем слово word, то в коде это будет выглядеть так:
3) Если ты ещё не понял, конструкция (слеши не отслешены): [\bC_ON\b\bW_ON\b\bC_OFF\b\bW_OFF\b] эквивалентна [\bC_ONWF] и найдёт 1 из перечисленных символов, но не их последовательность. 4) Пусть у тебя есть строка: "123.3 - 123 C_ON, W_ON, 1235, -456, C_OFF + W_OFF / Word G_is , OFF bat . War 5 dog_cat 67 ONtologi" После удаления у тебя получится: "123.3123C_ON,W_ON,1235,456,C_OFFW_OFF,.567" Именно это тебе нужно? |
|
|
AD |
29.8.2008, 12:24
Сообщение
#18
|
Профессионал Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: 17 |
1) Про символ '\b' нужно читать не в ассистенте, а в учебнике по С/С++ там же где и про символ '\n' 2) Когда в С/С++ пишешь регулярку нужно помнить об отслешивении слешей. Т.е. если в документации написано, что конструкция \b это граница слова, а ты хочешь найти скажем слово word, то в коде это будет выглядеть так:
3) Если ты ещё не понял, конструкция (слеши не отслешены): [\bC_ON\b\bW_ON\b\bC_OFF\b\bW_OFF\b] эквивалентна [\bC_ONWF] и найдёт 1 из перечисленных символов, но не их последовательность. 4) Пусть у тебя есть строка: "123.3 - 123 C_ON, W_ON, 1235, -456, C_OFF + W_OFF / Word G_is , OFF bat . War 5 dog_cat 67 ONtologi" После удаления у тебя получится: "123.3123C_ON,W_ON,1235,456,C_OFFW_OFF,.567" Именно это тебе нужно? Нет для приведенной строки получилось совсем не то, что мне надо! Согласен, что у меня корявая конструкция!!! Как сделать правильно? |
|
|
Tonal |
29.8.2008, 12:58
Сообщение
#19
|
Активный участник Группа: Участник Сообщений: 452 Регистрация: 6.12.2007 Из: Новосибирск Пользователь №: 34 Спасибо сказали: 69 раз(а) Репутация: 17 |
Напиши какие строки у тебя на входе, и что тебе нужно получить на выходе.
|
|
|
AD |
29.8.2008, 13:29
Сообщение
#20
|
Профессионал Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: 17 |
Цитата Напиши какие строки у тебя на входе, и что тебе нужно получить на выходе. Входная строчка: str = "7.3W_ON Unknown_event 4.1_ON 1C_OFF TTA_FAIL_TRUE RESET" Выходная: str = "7.3W_ON 4.1_ON 1C_OFF" Например, вот так! |
|
|
Текстовая версия | Сейчас: 14.1.2025, 8:57 |