Как сохранить определенные слова при предварительной обработке слов для НЛП? (Str.replace & regex) - PullRequest
1 голос
/ 08 октября 2019

Я хочу удалить цифру, кроме «3d», это слово. Я пробовал несколько методов, но не смог. Пожалуйста, просмотрите мой простой код ниже:


s = 'd3 4 3d'
rep_ls = re.findall('([0-9]+[a-zA-Z]*)', s)

>> ['3', '4', '3d']

for n in rep_ls:
    if n == '3d':
        continue
    s = s.replace(n, '')

>> s = 'd  d'
>> expected = 'd 3d'

Ответы [ 3 ]

3 голосов
/ 08 октября 2019

Для удаления всех цифр, кроме слова 3d, вы можете использовать отрицательный взгляд (?!, чтобы утверждать, что то, что прямо справа, не является трехмерным между границами слова \b

Затем сопоставьте 1+ цифр\d+

При замене используйте пустую строку.

(?!\b3d\b)\d+

Regex demo

1 голос
/ 08 октября 2019

Вы очень близки, вам просто нужно разделить значение на пробел, а затем зациклить значение, если значение равно 3d, не меняйте его, иначе измените его

import re;
s = 'd3 4 3d'
rep_ls = re.split(r'\s+', s)

final = ''
for n in rep_ls:
    if n == '3d':
        final +=' 3d'
        continue
    final +=  ' ' + re.sub(r'\d+','',n)


print(final)

Обрежьтестрока в конце, чтобы удалить лишний пробел или использовать оператор if, чтобы не добавлять пробел, когда индекс равен 0


Или вы можете использовать словарь и присоединиться к ним позже

import re;
s = 'd3 4 3d'
rep_ls = re.split(r'\s+', s)

final = []
for n in rep_ls:
    if n == '3d':
        final.append(n)
        continue
    final.append(re.sub(r'\d+','',n))

final = " ".join(final)    
print(final)

Вывод >> d 3d

0 голосов
/ 08 октября 2019

Может быть, это выражение,

(?i)(3d)\b|(\D+)|\d+

может нормально работать с re.sub из \1\2.

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

Если 3D также будет нежелательным, что мы предполагаем в противном случае, тогда (?i) можно безопасно удалить:

(3d)\b|(\D+)|\d+

Все что угодно, кроме 3d, которое вы хотите сохранить, попадет в первую группу захвата:

(3d|4d|anything_else)\b|(\D+)|\d+

Тест

import re

regex = r'(?i)(3d)\b|(\D+)|\d+'
string = '''d3 4 3d'''

print(re.sub(regex, r'\1\2', string))

Вывод

d 3d

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

Схема RegEx

jex.im визуализирует регулярные выражения:

enter image description here

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