Regex не определяет «#» для удаления - PullRequest
0 голосов
/ 01 февраля 2019

Как удалить '#' из слов в строке, за которыми следует '#', а не только '#', если он присутствует сам по себе, в середине слова или даже в конце.

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

test = "# #DataScience"
test = re.sub(r'\b#\w\w*\b', '', test) 

для удаления "#" из слов, начинающихся с '#', но оно не работает вообще. Возвращает строку как

Может кто-нибудь сказать, почему "#" не распознается и не удаляется? Примеры -

test - "# #DataScience"

Ожидаемый результат - "# DataScience"

Тест - "kjndjk#jnjkd"

Ожидаемый результат - "kjndjk#jnjkd"

Тест - "# #DataScience #KJSBDKJ kjndjk#jnjkd #jkzcjkh# iusadhuish#""

Ожидаемый результат - "# DataScience KJSBDKJ kjndjk#jnjkd jkzcjkh# iusadhuish#"

Ответы [ 4 ]

0 голосов
/ 01 февраля 2019

Попробуйте это:

test ="# #DataScience #KJSBDKJ kjndjk#jnjkd #jkzcjkh# iusadhuish#"
test = re.sub(r'(?<!\S)#(?=\S)', '', test)

Вывод:

# DataScience KJSBDKJ kjndjk#jnjkd jkzcjkh# iusadhuish#
0 голосов
/ 01 февраля 2019

Ваш \b размещен неправильно.

Ваше выражение регулярного выражения должно быть:

r'#\b\w+\b'

А также, квантификатор + означает 1 или более вхождений, что избавляет от необходимостидля вашего \w\w*

0 голосов
/ 01 февраля 2019

Я знаю, что есть принятый ответ, но я придумал это регулярное выражение, которое, кажется, тоже хорошо работает, лично я предпочитаю это, так как мне легче читать:

(\A|[^#\d\w])#\w\w*\b
0 голосов
/ 01 февраля 2019

Проблема с вашим шаблоном в том, что # не является символом слова, поэтому \b не будет работать с ним.Вместо этого вы можете использовать вид сзади:

test = "#HereToHelp STUFF #DataScience"
print(test)
test = re.sub(r'(?:(?<= )|^)#\w+\b', '', test)
print(test)

#HereToHelp STUFF #DataScience
 STUFF 
...