если я скомпилирую ваш код с помощью gnu g++ в своей системе :echo $? дает мне 1. У вас такая же проблема с кодом на c, bash, python,...? Также :имейте в виду, что $? доступен только для последней команды return :$? для эха $? равно 0.
Использование модуля 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
$ 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, а также обрабатывает ошибки при открытии. (
и )
и используйте нотацию среза строки, чтобы выделить имя ячейки. )
не встречается до(
Вы можете объединить различные операции разделения, чтобы получить имя ячейки.
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