Это действительно облегчило бы мою работу, если бы кто-то помог мне написать script в python или perl, в котором из заданного файла он возвращает все предложения, такие как:
[LANG::...]
для ecxample:
[LANG::Sample text with digits 0123]
и записывает его в файл в одной строке.
Большое спасибо за помощь
EDIT:
Спасибо за помощь, а теперь что-то более продвинутое.
если он найдет что-то вроде [: ANG::...], пожалуйста, напишите только... без скобок ang LANG:: tag.
Спасибо, ребята, вы потрясающие:)
import re
with open('input.txt', 'w') as f:
text = f.read()
#text = 'Intro [LANG::First text 1] goes on [LANG::Second text 2] and finishes.'
with open('output.txt', 'w') as f:
for match in re.findall('\[LANG::.*?\]', text):
f.write(match+'\n')
выходы:
[LANG::First text 1]
[LANG::Second text 2]
Вторая часть вопроса: если он найдет что-то вроде [: ANG::...], пожалуйста, пишите только... без скобок и тега LANG::.
Измените последнюю часть на:
with open('output.txt', 'w') as f:
for match in re.findall('\[.ANG::.*?\]', text):
if match.startswith('[:ANG'):
f.write(match[7:-1]+'\n')
else:
f.write(match+'\n')
Исправить эту подстрочную часть match[7:-1]
в соответствии с вашими потребностями.
perl version
perl -lne "print if /\[LANG::.+?\]/;" infile > outfile
Perl-версия (отредактирована для ввода из файла):
#!/usr/bin/perl
use strict;
use warnings;
open(my $in, '<', 'input.txt');
open(my $out, '>', 'output.txt');
while ( <$in> ) {
my @found = /\[LANG::.*?\]/g;
print $out "$_\n" for @found;
}
$ perl -nE'say $1 while /\[LANG::([^]]+)\]/g' input.txt >output.txt
#!/usr/bin/env python
import fileinput, re
for line in fileinput.input():
for match in re.findall(r'\[LANG::([^]]+)\]', line):
print match
Использование: $ print-lang input.txt >output.txt
井の中の蛙、大海を知らず [LANG::Japanese] a frog in a well cannot conceive of the ocean [LANG::English] терпи казак, атаманом будешь [LANG::Russian] no pain, no gain [LANG::English]
Japanese
English
Russian
English