Сценарий регулярного выражения в Python или Perl

1

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

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

для ecxample:

[LANG::Sample text with digits 0123]

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

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

EDIT:

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

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

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

  • 1
    Может ли быть «во что-нибудь»? Если так, как это обрабатывается? Думаю, это зависит от данных, но это может произойти :)
  • 0
    скажем, если кто-то хочет написать], то должен использовать управляющий символ, например \, поэтому нужно писать]. То же самое думаю, если кто-то хочет написать \, то должен написать \\
Теги:

4 ответа

4
Лучший ответ
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] в соответствии с вашими потребностями.

  • 0
    ОК. Скажите, пожалуйста, как получить значение текстовой переменной из файла, а не из жестко заданной строки? Спасибо
  • 1
    text = open (имя файла) .read ()
Показать ещё 8 комментариев
4

perl version

perl -lne "print if /\[LANG::.+?\]/;" infile > outfile
  • 1
    Ваш код извлекает целые строки, содержащие такие предложения, а не сами предложения.
  • 0
    @eumiro, пока мы не увидим полный входной файл, мое предположение так же хорошо, как и ваше
2

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
    это может быть написано проще в Perl stackoverflow.com/questions/5349783/…
  • 0
    Проще относительно. Это действительно короче, но не подходит, если - по какой-то случайности - этот код предназначен не только для одной строки, но должен быть включен в больший скрипт
0

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню