python - 在 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
解决方案
为了使您当前的表达式在字符串上起作用,您需要从末尾删除美元符号。此外,为了找到两位数的日期(意思是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']
推荐阅读
- pandas - 删除第一个单词,然后将该单词作为索引,就像一个热编码向量 pandas
- c++ - 从文件加载 QImage 的优化
- git - Jenkins:为 Github Pull 请求构建合并提交
- laravel - Laravel 5.4 政策检查总是假的
- spring - Spring 支持 IntellIJ
- java - 如何在scala和java中反序列化json
- python - 2018年熊猫世界杯数据集净胜球
- python - 如何做numpy.sctype2char的倒退。将 char 转换为 dtypes 或 sctype
- django - 在 Django 中请求数据
- swift - 在 tableView 上搜索多个对象