Хотите знать, как соответствовать определенной строке - tcl regexp - PullRequest
0 голосов
/ 19 июня 2020
How do I pattern match this in TCL?

set game1 base_ball_ABC_10_100_a_b_c
set game2 base_ball_CDE_20_200_d_e_f
set game3 base_bat_DEF_40_400_j_k_l

Приведенный ниже аргумент регулярного выражения, похоже, не работает, так как он будет соответствовать до 1-го di git (ie: _10, _20)?

if { ![regexp {^([^0-9]+)(.*)$} $k3 - bb digit] } {

Интересно, что будет регулярное выражение для соответствия base_ball и AB_10_100_a_b_c? Вышеупомянутое регулярное выражение, похоже, соответствует DIGIT?

Я бы хотел, чтобы оно совпадало с [base_ball or base_bat], а затем совпадало с [ABC_10_100, CDE_20_200].

1 Ответ

2 голосов
/ 19 июня 2020

Вам не нужно использовать regexp, если в строках одинаковое количество подчеркиваний, и если все, что вам нужно, всегда до и после второго подчеркивания:

set k3 {base_ball_ABC_10_100_a_b_c}
set parts [split $k3 "_"]
set part1 [join [lrange $parts 0 1] "_"]
# base_ball
set part2 [join [lrange $parts 2 end] "_"]
# ABC_10_100_a_b_c

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

set k3 {base_ball_ABC_10_100_a_b_c}
set parts [split $k3 "_"]
set part1 [lrange $parts 0 1]
set part2 [lrange $parts 2 end]

.

Документы для split , lrange , join


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

regexp {^([^_]+_[^_]+)_(.+)$} $k3 - bb digit

Где [^_]+ означает, что будет сопоставлен любой символ, кроме _ s, так что совпадение выше:

  • ^ - начало строки
  • [^_]+ - любое не _ s
  • _ - одно _
  • [^_]+ любой не _ s
  • _ один _
  • .+ - любые символы
  • $ - конец строки
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...