Счет возврата строк в Regex для Powershell - PullRequest
0 голосов
/ 02 июля 2018

Сегодня выучили основы регулярных выражений и, приложив некоторые усилия, смогли собрать воедино то, что ПОЧТИ работает.

У меня есть документы из книги, где мне нужно найти статьи (a, an, the) в пулях, а не в прозе.

Образец пули:

· Lorem ipsum lorem (XXX) Lorem · Lorem ipsum · Lorem ipsum, lorem и

Образец прозы: (Справа) Лорем написал ipsum . Lorem ipsum глагол ipsum.

Пока что это делает трюк более или менее:

$regexArticles = "^·\ [\w ,:;()+-=&·]*\b( the | a | an |The |An )\b.*$"
$articlecount = Select-String -Path $textfile -Pattern $regexArticles -AllMatches
"Article Count: " + $articlecount.Matches.Count

Чтобы сделать это немного более читабельным, я объясню свое мышление: Если строка начинается с маркера и далее следует любое количество слов и символов: ",: () + - = &.;", Возьмите ее, если есть также статьи.

Проблема, это не захватывает строку для следующего случая:

· Lorem ipsum lorem (XXX) Lorem · Lorem the ipsum · Lorem ipsum, lorem и

Lorem Lorem Lorem Lorem

Как сохранить такую ​​логику, когда строка, которую я хочу получить, содержит такие разрывы строк, как эта?

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

РЕДАКТИРОВАТЬ

Просто понял, что «почти» работает в моем возвышенном текстовом редакторе, на самом деле не работает в Powershell. По любой причине, даже если это возвращает совпадения в регулярном выражении с возвышенным текстом, это не для Powershell.

Теперь я знаю почему. В то время как возвышенный может обрабатывать символ пули, оболочка не может, поэтому он был опущен, и я не заметил. Теперь мне просто нужно знать, как правильно захватить пулю Unicode и передать ее таким же образом.

1 Ответ

0 голосов
/ 03 июля 2018

Как несколько хакерское исправление, потому что я не мог понять, как определить символ средней точки (u00B7) | (d183), я смог обойти это, исключив то, что я НЕ хотел найти.

"^[^\d^(^\s] *\b( the | a | an |The |An )\b.*$"

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

В ответ на мои первоначальные вопросы у меня было прозрение, что я мог просто добавить необязательный \ n? учитывать возможные разрывы строк! Окончательное выражение выглядит так:

^[^\w\d\s(].*\n?\r*?.*\b( the | a | an |The |An )\b.*$
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...