2016-10-31 2 views
0

Я начинаю с регулярным выражением и вам нужна ваша помощь в поиске правильного регулярного выражения для моего проекта в Notepad ++. Моя цель - найти регулярное выражение, чтобы найти &. Извлеките некоторые строки в одинарных кавычках, которые были извлечены из документа HTML. Мне нужно одно регулярное выражение, чтобы сделать все это, и я обязан использовать Notepad ++.Regex in Notepad ++ required

Вот структура моего текста документа (не может использовать оригинал, так как она содержит конфиденциальные материалы):

{ group: '1', code: '1111', ignored: true, shortDescription: 'This is a short "description", containing commas or quotes', description: '', document: 'documentname.txt', row: '1', original: 'this is the original text', translated: 'this is the translated text', matchRate: {label: "label", value: "value"} } _LF_ 
{ group: '2', code: '2222', ignored: true, shortDescription: 'This is another short "description", containing commas or quotes', description: '', document: 'documentname.txt', row: '1', original: 'this is the original text', translated: 'this is the translated text', matchRate: {label: "label", value: "value"} } _LF_ 
{ group: '3', code: '3333', ignored: true, shortDescription: 'This is yet another short "description", containing commas or quotes', description: '', document: 'documentname.txt', row: '1', original: 'this is the original text', translated: 'this is the translated text', matchRate: {label: "label", value: "value"} } 

Мои документы содержит 33 строк, все выглядит как это («LF» в конце концов, разрыв строки). «группа», «код» и т. д. всегда одинаковы, строка в одинарных кавычках отличается и также может быть пустой.

Мне нужно, чтобы извлекал все значения в '' (или удалял все остальное), разделенные запятой (или аналогичной), чтобы помещать их в документ excel. Мне также нужны разрывы строк.

Вот , что я уже сделал: Я могу найти все строки в одинарных кавычках с

([^']*+'[^\r\n']*+) 

хотя этим путем, также текст, который приходит после концовки одинарных кавычек до следующего начала одинарных кавычек отображается как выход.

Что мне еще нужно - это возможность стереть все остальные тексты, включая одинарные кавычки вокруг этих строк. Мне это не удалось. Вот то, что результат должен выглядеть следующим образом:

'1', '1111', 'This is a short "description", containing commas or quotes' '', 'documentname.txt', '1', 'this is the original text', 'this is the translated text' 
'2', '2222', 'This is another short "description", containing commas or quotes' '', 'documentname.txt', '1', 'this is the original text', 'this is the translated text' 
'3', '3333', 'This is yet another short "description", containing commas or quotes' '', 'documentname.txt', '1', 'this is the original text', 'this is the translated text' 

Я также читал некоторые темы на регулярном выражении, как this или this, и я узнал много (как я уже говорил, начинающий говорить здесь ...), но я Жду» t найти решение для извлечения точно строк, которые мне нужны.

Я был бы очень рад, если бы кто-то мог мне помочь. Большое спасибо!

+0

Try '[^ \ п«] *»([^\ n '] +)' [^ \ n '] * 'и заменить на' \ 1 \ t' –

+0

. Есть две проблемы: 1) поиск требуемых предметов и (2) точный формат вывода, который вы хотите , Если вы показываете пример с двумя или тремя строками ввода плюс ожидаемый вывод с этого ввода, на ваш вопрос может быть дан ответ. – AdrianHHH

+0

@ AdrianHHH Спасибо, я обновил свой вопрос соответственно. @Wiktor Stribiżew: Это не сделало трюк - но я думаю, что мой вопрос был слишком расплывчатым, надеюсь, теперь его яснее. – fraukeberlin

ответ

0

с помощью Notepad ++ регулярное выражение поиска и замены, убедитесь, что выбрать регулярный режим выражение и снимите галочку .matches Newline

Отредактировано: не захватывая запятой в пункте (разрешить только запятая)

найти [^'\r\n]*(?:'([^'\r\n,]*),?([^'\r\n,]*)'|([\r\n]+))(,(?=.*'))?

заменить \1\2\3\4

он должен получить ниже

1,1111,This is a short "description" containing commas or quotes,,documentname.txt,1,this is the original text,this is the translated text 
2,2222,This is another short "description" containing commas or quotes,,documentname.txt,1,this is the original text,this is the translated text 
3,3333,This is yet another short "description" containing commas or quotes,,documentname.txt,1,this is the original text,this is the translated text 

Он работает только предположить, что всегда есть новая строка в конце строки и ее фактический \r\n не _LF_

+0

Большое спасибо, что почти сделал трюк. Остается только одно: иногда в одном значении есть запятые. Таким образом, мне не нужно это: 1, 1111, Это короткое «описание», содержащий запятые или кавычки ,, ..... в моей последней версии, но: «1»,» 1111 ',' Это короткое «описание», содержащее запятые или кавычки ',' ', ..... , чтобы не было запятой, если запятая была фактически внутри значения, а не между ними. Знаете ли вы, как это сделать? – fraukeberlin

+0

Если я правильно понимаю, вы хотите отказаться от запятой в «Это короткое» описание «с запятыми или кавычками», попробуйте отредактированный ответ, он отбрасывает запятую, как выходное шоу, но допускает только одну запятую в элементе , иначе может сломаться – Skycc

+0

Теперь он работает! Большое спасибо! – fraukeberlin

0

Вы могли бы сделать это с помощью 2-х этапов:

1.

Поиск: .*?(?:\s'([^']+)'|(_LF_)).*?

Заменить: $1$2,

2.

Поиск: ,_LF_,

Замена: \r\n

Это оставит вас:

1, 1111, This is a short "description", containing commas or quotes, documentname.txt, 1, this is the original text, this is the translated text 

2, 2222, This is another short "description", containing commas or quotes, documentname.txt, 1, this is the original text, this is the translated text 

3, 3333, This is yet another short "description", containing commas or quotes, documentname.txt, 1, this is the original text, this is the translated text, , matchRate: {label: "label", value: "value"} } 

Вы тогда просто нужно обрезать последний из,, matchRate: {метка: "метка", значение: "значение"} }.

Это будет работать, только если в конце каждой строки всегда есть _LF_.

+0

Большое спасибо. Но когда я применяю регулярное выражение, все запятые, кажется, исчезнут, что оставляет меня только с такими значениями. Еще на один шаг ближе, чем раньше ... :) – fraukeberlin

+0

Извините, у меня было ненужное место во втором поиске. Теперь отредактированный код должен работать. Не уверен, что происходит с вашими запятыми. Когда я пытаюсь, они не удаляются. Убедитесь, что ваша первая замена определенно «$ 1 $ 2» с запятой в конце. – Neal

+0

Я думаю, что теперь это сработает, но поскольку _LF_ на самом деле является перерывом в строке, это кажется проблемой. Я думаю, что смогу понять это сам на минуту. В любом случае, поскольку у меня есть одно решение сейчас, я хочу поблагодарить вас за советы :) – fraukeberlin