-2

我的电话号码可能如下所示:

927-6847
611-6701p3715ou264-5435
869-6289fillemichelinemoisan
613-5000p4238soirou570-9639cel

等等...

我想识别并将它们分解为:

9276847
6116701
2645435
8696289
6135000
5709639

存储在其他地方的字符串:

611-6701p3715ou264-5435
869-6289fillemichelinemoisan
613-5000p4238soirou570-9639cel

当数字之间有a时p,p之后的数字是扩展-获取p之前的数字并将整个字符串保存在其他地方当有时ou,另一个数字在其后开始当有cel或任何随机字符串时,获取数字部分并保存其他地方的整个字符串

编辑:这是我尝试过的:

phNumber='928-4612cel'
if not re.match('^[\d]*$', phNumber):
     res = re.match("(.*?)[a-z]",re.sub('[^\d\w]', '', phNumber)).group(1)    

我正在寻找处理案例并确定哪些字符串在通过正则表达式被截断之前有更多字符

4

1 回答 1

1

首先让我再次确认您的要求:

  1. 找出模式为“xxx-xxxx”的数字,其中 x 是 0-9 之间的任意数字,然后使用模式“xxxxxxx”保存数字。
  2. 如果文本中有任何随机字符串,则保存整个字符串。
import re

# make a list to input all the string want to test, 
EXAMPLE = [
    "927-6847",
    "9276847"
    "927.6847"
    "611-6701p3715ou264-5435",
    "6116701p3715ou264-5435",
    "869-6289fillemichelinemoisan",
    "869.6289fillemichelinemoisan",
    "8696289fillemichelinemoisan",
    "613-5000p4238soirou570-9639cel",
]

def save_phone_number(test_string,output_file_name):
    number_to_save = []

    # regex pattern of "xxx-xxxx" where x is digits
    regex_pattern = r"[0-9]{3}-[0-9]{4}"
    phone_numbers = re.findall(regex_pattern,test_string)

    # remove the "-"
    for item in phone_numbers:
        number_to_save.append(item.replace("-",""))

    # save to file
    with open(output_file_name,"a") as file_object:
        for item in number_to_save:
            file_object.write(item+"\n")

def save_somewhere_else(test_string,output_file_name):
    string_to_save = []

    # regex pattern if there is any alphabet in the string
    # (.*) mean any character with any length
    # [a-zA-Z] mean if there is a character that is lower or upper alphabet
    regex_pattern = r"(.*)[a-zA-Z](.*)"
    if re.match(regex_pattern,test_string) is not None:
        with open(output_file_name,"a") as file_object:
            file_object.write(test_string+"\n")

if __name__ == "__main__":

    phone_number_file = "phone_number.txt"
    somewhere_file = "somewhere.txt"

    for each_string in EXAMPLE:
        save_phone_number(each_string,phone_number_file)
        save_somewhere_else(each_string,somewhere_file)
于 2020-05-16T01:45:28.900 回答