首页 > 解决方案 > 在 Python 中使用正则表达式搜索字符串

问题描述

我一直在创建一些正则表达式模式来搜索文件。我基本上需要将文本文件的每一行搜索为一串值。我遇到的问题是,我创建的正则表达式在用于值列表时起作用;但是,当我使用相同的正则表达式搜索字符串时,我不能使用相同的正则表达式。我不确定我错过了什么。我的测试代码如下。正则表达式适用于 list_primary,但是当我将其更改为 string2 时,正则表达式找不到我要查找的日期值。

import re

list_primary = ["Wi-Fi", "goat", "Access Point", "(683A1E320680)", "detected", "Access Point detected",  "2/5/2021", "10:44:45 PM",  "Local",  "41.289227",  "-72.958748"]
string1 = "Wi-Fi Access Point (683A1E320680) detected puppy Access Point detected 2/5/2021 10:44:45 PM Local 41.289227 -72.958748"
#Lattitude = re.findall("[0-9][0-9][.][0-9][0-9][0-9][0-9][0-9][0-9]")
#Longitude = re.findall("[-][0-9][0-9][.][0-9][0-9][0-9][0-9][0-9][0-9]")
string2 = string1.split('"')
# print(string2)

list1 = []

for item in string2:

    data_dict = {}

    date_field = re.search(r"(\d{1})[/.-](\d{1})[/.-](\d{4})$",item)
    print(date_field)

    if date_field is not None:
        date = date_field.group()
    else:
        date = None

标签: pythonregex

解决方案


为了使您当前的表达式在字符串上起作用,您需要从末尾删除美元符号。此外,为了找到两位数的日期(意思是11/20/2018),您需要更改重复次数(因为使用正则表达式,您只能找到单数日期,例如2/5/2011):

import re

list_primary = ["Wi-Fi", "goat", "Access Point", "(683A1E320680)", "detected", "Access Point detected",  "2/5/2021", "10:44:45 PM",  "Local",  "41.289227",  "-72.958748"]
string1 = "Wi-Fi Access Point (683A1E320680) detected puppy Access Point detected 2/5/2021 10:44:45 PM Local 41.289227 -72.958748"
#Lattitude = re.findall("[0-9][0-9][.][0-9][0-9][0-9][0-9][0-9][0-9]")
#Longitude = re.findall("[-][0-9][0-9][.][0-9][0-9][0-9][0-9][0-9][0-9]")
string2 = string1.split('"')
# print(string2)

list1 = []

for item in string2:

    data_dict = {}

    date_field = re.search(r"(\d{1,2})[/.-](\d{1,2})[/.-](\d{4})",item)
    print(date_field)

    if date_field is not None:
        date = date_field.group()
    else:
        date = None

输出:

re.Match object; span=(71, 79), match='2/5/2021'>

如果您想从字符串中提取日期(而不仅仅是搜索它是否存在),请在整个表达式周围包含一个捕获组,以便将您的日期视为一个字符串而不是 3 个不同的数字:

date_field = re.findall(r"(\d{1,2}[/.-]\d{1,2}[/.-]\d{4})",string1)
print(date_field)

输出:

['2/5/2021']

推荐阅读