у меня есть файлы, как это:Perl регулярного выражение вложенная группировка результаты
mu (micro) | 10^(-6) | millionth
m (milli) | 0.001 | thousandth
k (kilo) | 10^3 | thousand
M (mega) | 10^6 | million
И я хотел бы, чтобы произвести файлы, такие как:
| $mu (micro)$ | $10^(-6)$ | $millionth$ |
| $m (milli)$ | $0.001$ | $thousandth$ |
| $k (kilo)$ | $10^3$ | $thousand$ |
| $M (mega)$ | $10^6$ | $million$ |
Я пытаюсь использовать регулярное выражение на языке Perl. И до сих пор лучший reexpression я мог придумать это:
perl -lpe '(([[:alnum:][:punct:]\s]+)\s+|\|\s*([[:alnum:][:punct:]\s]+)\s*\||\s*([[:alnum:][:punct:]\s]+))'
Я знаю, что есть несколько избыточных \s+
, но я попытался удалить их результат был хуже. Ток он только отделяет его в двух частях:
mu (micro) | 10^(-6) |
millionth
Итак, как я могу улучшить это, чтобы получить желаемый результат? Я знаю, что я могу использовать s/foo/bar/g
, чтобы заменить его, но я не могу заставить это выражение правильно отделяться. Также как мне получить доступ к вложенным группам?
Возможно, есть лучший способ сделать это, я открыт для предложений.
'perl -lpe '(([[: alnum:] [: punct:] \ s] +) \ s + | \ | \ s * ([[: alnum:] [: punct:] \ s] +) \ s * \ || \ s * ([[: alnum:] [: punct:] \ s] +)) '' - чепуха. Это неверный код Perl. – melpomene
Если вы знаете, что трубы уникальны как разделители: 'perl -E '$ s =" mu (micro) | 10^(- 6) | millionth "; @ a = split/\ | /, $ s; скажем, «| \ $». (присоединитесь к «\ $ | \ $», @ a). "\ $ |" '' –