Regex очистить текст там, где нет текста до / после разделителя - PullRequest
1 голос
/ 24 марта 2019

Я пытаюсь очистить некоторый текст, где есть разделители без текста до / после него.

Типы:

3150779 | 3674-4 |Water Supply Plan
3637730 |
 | 10903-155 | Layout 10903 DWG 155 29 M | 
| 10903-155 | | Water Supply |

Я понимаю, [^\|]+ разбивает это, но я хочу избавиться от разделителя, когда нет текста до / после разделителя. Таким образом, регулярное выражение должно привести к

3150779 | 3674-4 | Water Supply Plan
3637730
10903-155 | Layout 10903 DWG 155 29 M
10903-155 | Water Supply

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

См. https://regex101.com/r/GzbCEU/1

Я также попытался [\s]+\|\s(.*), и это выбирает разделители, но не очищает текст.

--- ОБНОВЛЕНИЕ --- Когда я пробую предложение Пушпеша Кумара Раджванши, я не получаю значения в GSheet ... enter image description here

, а также тот же вопрос

enter image description here

Ответы [ 2 ]

2 голосов
/ 24 марта 2019

Вы можете использовать это регулярное выражение,

^ *(?:\| *)+| *(?:\| *)+$|(\| *){2,}

Объяснение:

Для обработки трех случаев есть три чередующиеся части.

  • ^ *(?:\| *)+ - этот заменяет все |, которые в начале могут иметь пробелы в середине
  • | - чередование
  • *(?:\| *)+$ - этот заменяет все|, которые, в конце концов, могут иметь пробелы в середине
  • (\| *){2,} - Эта замена заменяет все |, которые более двух могут иметь пробелы между ними, но сохраняют последний интервал.

И замените его на $1, который работает в листах Google.

Обратите внимание, что замена на $1 происходит только тогда, когда | сопоставляются в третьей группе альтернатив, где онпросто сохраняет один | из нескольких.

Демо

Редактировать: снимки экрана, показывающие, как найти / заменить с помощью регулярных выражений,

Перед заменой

enter image description here

Afзамена тер

enter image description here

1 голос
/ 24 марта 2019

Я думаю, что этот повтор должен работать для вас:
/[ ]*(?<![\d][ \*])\| | \|$/gm

Демо (обязательно откройте аккордеон "Замена" в нижней части демонстрационной страницы, чтобы увидетьвывод)

$re = '/[ ]*(?<![\d][ \*])\| | \|$/m';
$str = '3150779 | 3674-4 | Water Supply Plan
3637730 |
 | 10903-155 | Layout 10903 DWG 155 29 M | 
| 10903-155 | | Water Supply |';

preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);

// Print the entire match result
var_dump($matches);

вывод:

3150779 | 3674-4 | Water Supply Plan
3637730
10903-155 | Layout 10903 DWG 155 29 M
10903-155 |Water Supply
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...