Печатать определенное слово на питоне

если я скомпилирую ваш код с помощью gnu g++ в своей системе :echo $? дает мне 1. У вас такая же проблема с кодом на c, bash, python,...? Также :имейте в виду, что $? доступен только для последней команды return :$? для эха $? равно 0.

-2
12.10.2020, 12:29
3 ответа

Использование модуля Python re и положительного взгляда -позади, так что мы находим строку до совпадения, но не используем ее для результата.

Найти все совпадения во входном файле и вывести их построчно в выходной файл:

import re

with open('input_file.txt', 'r') as f:
    m = re.findall('(?<=cell \()[^)]*', f.read())
    
with open('output_file.txt', 'w') as f:
    for x in m:
        f.write(x+"\n")

Вот некоторое объяснение регулярного выражения:

                '(?<=   cell \(  ) [^)]*'
positive look-behind=   -------    match all to the next closing parenthesis

Вы можете изменить регулярное выражение, придав ему более строгую форму.:

'(?<=cell \()[^)]*(?=\) {)'

если вы хотите также использовать просмотр -вперед, чтобы явно требовать ) {после любого совпадения.

Тестирование

> cat input_file.txt 
cell (XOR4DGHFDH22DSVT) {
    test(test)
}
cell (ND2DGH557GGHDSVT) {
cell (SDK1DNG45GKDSVT) {
> python3 test.py 
> cat output_file.txt 
XOR4DGHFDH22DSVT
ND2DGH557GGHDSVT
SDK1DNG45GKDSVT
0
18.03.2021, 22:58
$ python3 -c 'import sys
with open(sys.argv[1]) as f:
  for l in f:
    a, b = map(lambda x: l.find(x), ["(",")"])
    print(l[a+1:b])
' out > out1

$ cat out1
XOR4DGHFDH22DSVT
ND2DGH557GGHDSVT
SDK1DNG45GKDSVT
  • идиоматический/питоновский способ заключается в использовании предложения with-open, так как он автоматически закрывает файловый дескриптор в точке eof, а также обрабатывает ошибки при открытии.
  • запишите позиции в текущей строке символов (и ) и используйте нотацию среза строки, чтобы выделить имя ячейки.
  • Предполагая, что ) не встречается до(
2
18.03.2021, 22:58

Вы можете объединить различные операции разделения, чтобы получить имя ячейки.

python3 -c '
import sys 
with open(sys.argv[1]) as f:
  for l in f:
    print(l.split("(")[1].split(")")[0]) 
' input_file
XOR4DGHFDH22DSVT
ND2DGH557GGHDSVT
SDK1DNG45GKDSVT
0
18.03.2021, 22:58

Теги

Похожие вопросы