Удаление строк только с цифрами - регулярное выражение - PullRequest
0 голосов
/ 09 июня 2018

Я новичок как в Python, так и в регулярных выражениях.Я пытаюсь обработать текстовый файл, в котором я хочу удалить строки, содержащие только цифры и пробел.Это регулярное выражение, которое я использую.

^\s*[0-9]*\s*$

Я могу сопоставить строки, которые хочу удалить (в notepad ++ диалог поиска).

, но когда я пытаюсь сделать то же самоес питоном строки не совпадают.Есть ли проблема в самом регулярном выражении или какая-то проблема с моим кодом Python?

Код Python, который я использую:

contacts = re.sub(r'^\s*[0-9]*\s*$','\n',contents)

Образец текста

Age:30
Gender:Male



20 


Name:संगीता शर्मा
HusbandsName:नरेश कुमार शर्मा
HouseNo:10/183
30 30
Gender:Female


21 

Name:मोनू शर्मा
FathersName:कैलाश शर्मा
HouseNo:10/183
30
Gender:Male

Ответы [ 2 ]

0 голосов
/ 09 июня 2018

Вам даже не нужно регулярное выражение, просто str.translate(), чтобы удалить символы, которые вам не интересны, и проверить, осталось ли что-то более чем достаточно:

import string

clear_chars = string.digits + string.whitespace  # a map of characters we'd like to check for

# open input.txt for reading, out.txt for writing
with open("input.txt", "rb") as f_in, open("output.txt", "wb") as f_out:
    for line in f_in:  # iterate over the input file line by line
        if line.translate(None, clear_chars):  # remove the chars, check if anything is left
            f_out.write(line)  # write the line to the output file
        # uncomment the following if you want added newlines when pattern matched
        # else:
        #     f_out.write("\n")  # write a new line on match

Который выдаст для вашего примера ввода:

Age:30
Gender:Male
Name:संगीता शर्मा
HusbandsName:नरेश कुमार शर्मा
HouseNo:10/183
Gender:Female
Name:मोनू शर्मा
FathersName:कैलाश शर्मा
HouseNo:10/183
Gender:Male

Если вы хотите, чтобы совпадающие строки были заменены новой строкой, просто раскомментируйте предложение else.

0 голосов
/ 09 июня 2018

Используйте re.sub в многострочном режиме:

contacts = re.sub(r'^\s*([0-9]+\s*)+$','\n',x, flags=re.M)

Демо

Если вы хотите, чтобы начало ^ и окончание $ якоря для включения, затем вы хотите быть в многострочном режиме.

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

^\s*([0-9]+\s*)+$
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...