Сценарий регулярного выражения в Python или Perl - PullRequest
1 голос
/ 18 марта 2011

Это действительно облегчит мою работу, если кто-нибудь сможет помочь мне с написанием скрипта на python или perl, в котором из данного файла он получает все предложения вроде:

[LANG::...]
  • ... означает что-нибудь

для примера:

[LANG::Sample text with digits 0123]

и записывает его в файл в одну строку.

Большое спасибо за помощь

EDIT:

Спасибо за помощь, а теперь что-то более продвинутое.

если он находит что-то вроде [: ANG :: ...], пишите только ... без скобок и LANG :: tag.

Спасибо, ребята, вы потрясающие:)

Ответы [ 4 ]

4 голосов
/ 18 марта 2011

Perl версия

perl -lne "print if /\[LANG::.+?\]/;" infile > outfile
4 голосов
/ 18 марта 2011
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] в соответствии с вашими потребностями.

2 голосов
/ 18 марта 2011

Версия 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;
}
0 голосов
/ 18 марта 2011

Perl

$ perl -nE'say $1 while /\[LANG::([^]]+)\]/g' input.txt >output.txt

Python

#!/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

input.txt

井の中の蛙、大海を知らず [LANG::Japanese] a frog in a well cannot conceive 
of the ocean [LANG::English]

терпи казак, атаманом будешь [LANG::Russian] no pain, no gain [LANG::English]

output.txt

Japanese
English
Russian
English
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...