Измените REGEX для темы электронной почты, чтобы добавить группу захвата - PullRequest
0 голосов
/ 07 мая 2020

У меня есть регулярное выражение для фильтрации строки темы электронного письма, и оно очень хорошо удаляет элементы RE / Fwd, чтобы просто оставить саму тему. Прямо сейчас это просто соответствие частей RE / FWD, и хотя это полезно, если бы я мог использовать его в качестве поиска и замены, мне нужно прямо противоположное и добавить группу захвата для захвата объекта без RE / FWD, чтобы я мог используйте его в другом месте.

/([\[\( ] *)?(RE|FWD?) *([-:;)\]][ :;\])-]*|$)|\]+ *$/gims

и примеры:

Fwd : Re : Re: Many
Re : Re: Many
Re  : : Re: Many
Re:: Many
Re; Many
: noah - should not match anything
RE--
RE: : Presidential Ballots for Florida
[RE: (no subject)]
Request - should not match anything
this is the subject (fwd)
 Re: [Fwd: ] Blonde Joke
Re: [Fwd: [Fwd: FW: Policy]]
Re: Fwd: [Fwd: FW: "Drink Plenty of Water"]
FW: FW: (fwd) FW:  Warning from XYZ...
FW: (Fwd) (Fwd) 
Fwd: [Fwd: [Fwd: Big, Bad Surf Moving]]
FW: [Fwd: Fw: drawing by a school age child in PA (fwd)]
Re: Fwd

Ожидаемым результатом будет группа захвата, на которую я мог бы ссылаться как на $ 1, $ 2 и c, что будет содержать следующие строки темы:

Many
Many
Many
Many
Many
: noah - should not match anything

Presidential Ballots for Florida
(no subject)
Request - should not match anything
this is the subject
Blonde Joke
Policy
"Drink Plenty of Water"
Warning from XYZ...

Big, Bad Surf Moving
drawing by a school age child in PA

Ответы [ 2 ]

0 голосов
/ 07 мая 2020

Для данных примера вы можете сопоставить все варианты в начале строки, которые вам не нужны, и зафиксировать в группе 1 то, что вы хотите сохранить.

(?:[^\S\r\n]*+[\[(]?(?:re|fwd?)(?!\w)[^\S\r\n]*[:;-]*(?:[^\S\r\n]+[:;-]+)*[^\S\r\n]*[\])]?)+|(\S.*?)(?:\]+|$)

Обратите внимание, что это шаблон не принимает во внимание балансирующие скобки или круглые скобки.

Regex demo

0 голосов
/ 07 мая 2020

Добавьте группу в конец текущего регулярного выражения для захвата темы:

([\[\( ] *)?(RE|FWD?) *([-:;)\]][ :;\])-]*|$)|\]+ (.*)

Затем используйте группу из совпадения, обычно "$1" или "\1" в зависимости от вашего языка / инструмента.

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