Я новичок в Python и интересно, что это лучший способ, чтобы написать код, приведенный ниже в Perl в Python:Easy/Простой способ записи переключательных регулярные выражения
if ($line =~ /(\d)/) {
$a = $1
}
elsif ($line =~ /(\d\d)/) {
$b = $1
}
elsif ($line =~ /(\d\d\d)/) {
$c = $1
}
То, что я хочу сделать, это получить определенную часть каждой строки в большом наборе строк. В python все, что я могу сделать, это как показано ниже и очень уродливо.
res = re.search(r'(\d)', line)
if res:
a = res.group(1)
else:
res = re.search(r'(\d\d)', line)
if res:
b = res.group(1)
else:
res = re.search(r'(\d\d\d)', line)
if res:
c = res.group(1)
Кто-нибудь знает лучший способ написать то же самое без встроенного модуля?
EDIT:
Как вы пишете, если вам нужно разбора строки, используя очень разные ре? Моя точка зрения здесь должна быть простой, чтобы любой мог понять, что там делает код. В Perl'е, мы можем написать:
if ($line =~ /^this is a sample line (.+) and contain single value$/) {
$name = $1
}
elsif ($line =~ /^this is another sample: (.+):(.+) two values here$/) {
($address, $call) = ($1, $2)
}
elsif ($line =~ /^ahhhh thiiiss isiss (\d+) last sample line$/) {
$description = $1
}
Из моей точки зрения, этот вид перловый код очень прост и легко понять.
EDIT2: я нашел же обсуждение здесь:
http://bytes.com/topic/python/answers/750203-checking-string-against-multiple-patterns
Таким образом, нет никакого способа, чтобы написать в питоне просто достаточно, как Perl ..
вы можете использовать 'elif' –
Можете ли вы поделиться, для какого значения $ line будет выполняться раздел elsif? ИМО, только если ($ line = ~/(\ d) /) 'достаточно для всех случаев; если условия не в обратном порядке. – shantanoo
Вы даете значение по умолчанию, если b или c не совпадают? –