удалить точки, а не десятичные точки - PullRequest
2 голосов
/ 09 ноября 2019

У меня есть длинная строковая переменная (много предложений, разделенных ".") С некоторой важной числовой информацией, как правило, с десятичной точкой (например, "6,5 фунтов").

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

ОТ:

First sentence.  Second sentence contains a number 1.0 and more words.  One more sentence.

TO:

First sentence  Second sentence contains a number 1.0 and more words  One more sentence

Я делаю это в Stata, используя функции регулярных выражений Unicode, которые соответствуют этому стандарту: http://userguide.icu -project.org / strings / regexp

Что я думал, что я делал следующее: «замените точку пробелом, если предыдущий символ является строчной буквой».

gen new_variable = ustrregexrf(note_text, "(?<=[a-z])\.", " ")

Я считаю, что он удалит один период на строку,но не удалит их все. Возможно, что мне нужно сделать, это сказать: do this for all the periods you find satisfying the condition, но так как это не работает так, как я думаю, это уже возможно, возможно, мне нужно объяснение того, что на самом деле делает.

Бонусные баллы, если вы можете сказать мне, как удалить период, когда после числа стоит пробел:

number is 1.0. Next sentence -> number is 1.0 Next sentence

РЕДАКТИРОВАТЬ:иногда встречаются строки, такие как end sentence.begin next sentence без пробелов, поэтому разделение на пробел не справится со всеми моими делами.

1 Ответ

1 голос
/ 09 ноября 2019

Метод 1

Может быть,

\.(?=\s|$)

может быть в порядке, чтобы посмотреть.

Демонстрация 1


Метод 2

\d+\.\d+(*SKIP)(*FAIL)|\.

Демонстрация 2

- это еще один вариант, который можно использовать, установив модуль regex:

$ pip3 install regex 

Тест

import regex as re

string = '''
First sentence.  Second sentence contains a number 1.0 and more words.  One more sentence.First sentence.  Second sentence contains a number 1.0 and more words.  One more sentence.
'''

expression = r'\d+\.\d+(*SKIP)(*FAIL)|\.'

print(re.sub(expression, '',  string))

Вывод

Первое предложение Второе предложение содержит число 1,0 и более слов Еще одно предложениеПервое предложение Второе предложение содержит число 1,0 и более слов Одинеще предложение

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