Сегодня мне понадобилась утилита для удаления некоторых данных из файла, и я написал ужасное регулярное выражение для этого. Ввод был файл с большим количеством строк в формате:
<address> <11 * ascii character value> <11 characters>
00C4F244 75 6C 74 73 3E 3C 43 75 72 72 65 ults><Curre
Я хотел зачеркнуть все до 11 символов в конце и использовал следующее выражение:
"^[0-9A-F+]{8}[\\s]{2}[0-9A-F\\s]{34}"
Это соответствует битам, которые мне не нужны, которые я затем удалил из исходной строки. Я хотел бы посмотреть, как вы это сделаете, но я не мог работать в следующих областях:
1: с помощью движка регулярных выражений вернуть нужные символы, а не символы, которые я не сделал, и
2: найти способ повторить совпадение для одного значения ascii с последующим пробелом (например, «75» = [0-9A-F] {2} [\ s] {1}?) И повторить этот 11 раз, а не захватывая 34 символа.
Глядя на это снова, проще всего было бы сопоставить последние 11 символов в каждой строке ввода, но это не очень гибко, и в интересах изучения регулярных выражений я хотел бы посмотреть, как вы можете сопоставить с начало последовательности.
Редактировать: Спасибо, ребята, это то, что я хотел:
"(?:^[0-9A-F]{8} )(?:[0-9A-F]{2} ){11} (.*)"
Хотелось бы, чтобы я стал более зеленым.