Найти НЕ удвоенный слеш

Ципихович Эндрю

Активный пользователь
Пользователь
Мар 27, 2021
490
26
28
здравствуйте как в тексте найти НЕ удвоенный слеш, и то что справа и слева от него, чтобы было можно найти ошибку? спасибо

гут\\, а вот НЕ гут\а, ещё один Не гут\\\, как найти выделенное цветом?
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
здравствуйте как в тексте найти НЕ удвоенный слеш, и то что справа и слева от него, чтобы было можно найти ошибку?
Можно так:
Python:
s = r'гут\\, а вот НЕ гут\а, ещё один Не гут\\\ '
s = s.replace('\\\\', '/')  # заменяем двойные обратные слеши на 1 прямой
for i, item in enumerate(s):
    if item == '\\':
        print(s[i - 10: i + 10].replace('/', '\\\\'))  # выводим обратный слеш и 10 символов справа и слева  от него
 

Ципихович Эндрю

Активный пользователь
Пользователь
Мар 27, 2021
490
26
28
# заменяем двойные обратные слеши на 1 прямой
и потом в сообщении об ошибке вы возвращаете обратно, но у меня в сообщении об ошибке выдало
ua=[\\*]![~\’=правиль
и такого текста нет, а есть
ua=[/*]![~\’=правиль
как подправить?
и как сделать, что хоть и "\’" это ошибка как сказано в посте № 1, но на самом деле, это нормально, это экранирование апострофа
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
как сделать, что хоть и "\’" это ошибка как сказано в посте № 1, но на самом деле, это нормально, это экранирование апострофа
Можно так:
Python:
s = r'гут\\, а вот НЕ гут\а, ещё один Не гут\\\ еще гут \'текст \n\r\t\\'
good = r"\"\\'nrt"  # символы которые можно экранировать
# проходим в цикле по строке + ' ' (чтобы можно было обращать к s[i + 1])
s = s + ' '
for i, item in enumerate(s):
    # если текущий символ - обратный слеш, а следующий не из строки good
    if item == '\\' and s[i + 1] not in good and i != len(s) - 2:
        # выводим обратный слеш и 10 символов справа и слева  от него
        print(s[i - 10: i + 10])
 

Ципихович Эндрю

Активный пользователь
Пользователь
Мар 27, 2021
490
26
28
тоже, что то мимо, выдало ошибку
*1*/['[рб\\]', '[\\Р
но тут всё хорошо
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
тоже, что то мимо, выдало ошибку
*1*/['[рб\\]', '[\\Р
но тут всё хорошо
Можно вот так попробовать:
Python:
s = r"гут\\, а вот НЕ гут\а, ещё один Не гут\\\ еще гут \'текст \n\r\t\\*1*/['[рб\\]', '[\\Р \\\\\\\\\3\\"
good = r'''"'nrt'''  # символы которые можно экранировать

backslash = False 
slash_text = ""
for i, item in enumerate(s):
    if item == '\\' and not backslash:
        backslash = True 
    if backslash:
        slash_text += item
    if item != '\\' and backslash:
        backslash = False
        if slash_text.count('\\') % 2 and slash_text[-1] not in good:
            print(f"{s[i - 10: i + 10]}")
        slash_text = ''
 

Ципихович Эндрю

Активный пользователь
Пользователь
Мар 27, 2021
490
26
28
подскажите, как можно укоротить нижеследующее:
Код:
my_string = r"['[рб\\]', '[\Республика\\Республики\\Республику\\Республике\\ Беларусь]СНМ'],"
start = -1
count = 0
all_fnd = []
while True:
    start = my_string.find('\\', start + 1)
    if start != -1: all_fnd.append(start)
    if start == -1: break
    count += 1

print("Все вхождения искомого символа в строку: ", count, all_fnd)
спасибо
 

Ципихович Эндрю

Активный пользователь
Пользователь
Мар 27, 2021
490
26
28
в принципе не интересует.........
 

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
973
220
43
21
Москва
Python:
my_string = r"['[рб\\]', '[\Республика\\Республики\\Республику\\Республике\\ Беларусь]СНМ'],"
start = -1
all_fnd = []
while start := my_string.find(r'\\', start+1) + 1:
    all_fnd.append(start-1)

print("Все вхождения искомого символа в строку: ", len(all_fnd), all_fnd)
 

Ципихович Эндрю

Активный пользователь
Пользователь
Мар 27, 2021
490
26
28
спасибо за ответ, зря я так спросил, так как это у меня будет в цикле, поэтому
1
как в цикле из строки сделать R строку?
2
как код из поста 9 переделать, если будет по условию:
Код:
my_string = "['[рб\\]', '[\Республика\\Республики\\Республику\\Республике\\ Беларусь]СНМ'],"
спасибо
 

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
973
220
43
21
Москва
Python:
my_string = "['[рб\\]', '[\Республика\\Республики\\Республику\\Республике\\ Беларусь]СНМ'],"
my_string = repr(my_string)
start = -1
all_fnd = []
while start := my_string.find(r'\\', start + 1)+1:
    all_fnd.append(start-1)
print(all_fnd)
 

Ципихович Эндрю

Активный пользователь
Пользователь
Мар 27, 2021
490
26
28
как в цикле из строки сделать R строку?
как я понял, ответ:
Код:
my_string = "['[рб\\]', '[\Республика\\Республики\\Республику\\Республике\\ Беларусь]СНМ'],"
my_string = repr(my_string)
print(my_string)
так? что-то не сходится...
Код:
print(len('\\'))  # => 1 = количество искомого
print(len(r'\\'))  # => 2 = количество искомого
print(len(repr('\\')))  # => 4 = количество искомого
 

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
973
220
43
21
Москва
Python:
print('\\', len('\\'))  # => \ 1
print(r'\\', len(r'\\'))  # => \\ 2
print(repr('\\'), len(repr('\\')))  # => '\\' 4

repr просто добавил кавычки на выходе
 

Форум IT Специалистов