regex python模式

2024-06-16 14:09:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用以下正则表达式模式在文本文件中搜索:

  • 十六进制数(查找:1a2bc3d4e5或2369.235.26.158963或Aaa4)
  • 只有字母“a”或空格。可能有“a”,空格或 两个,但没有别的。公司名称:

下面是我的十六进制数的正则表达式:

matches = re.compile(' 0[xX][0-9a-fA-F]+ ')

下面是我的第二个模式的正则表达式:

^{pr2}$

不幸的是,它不起作用。 提前谢谢你的帮助


Tags: re名称字母模式公司fa空格matches
1条回答
网友
1楼 · 发布于 2024-06-16 14:09:16

老实说,有时候我认为在提问时最好包括一些实际的输入(或接近它的东西)和期望的输出。对于您的十六进制数,我想知道您是想捕获该值前面的0x还是避免它;第二个带有正则表达式原型的可变长度十六进制(稍微更正)将捕获诸如“def”、“bad”等内容。无论如何,拥有输入和所需输出有助于理解问题。回答问题的人也是如此。在

也就是说,对于你的第一个regex(因为我不明白你第二个想要什么),我倾向于使用“findall”,因为它更直接,并且产生组匹配,所以使用下面的输入(假设您知道我正在创建一个字符串来代替使用文件.read()方法,并使我的正则表达式捕获超过4个字符的字符串)

编码

import re

input = '''This is a hex number 0xAF67E49
This is NOT a hex number tgey736zde
This hex number 0xb34df49a appears in the middle of a sentence
This could be a hex number but has no letters 3689320'''

matches1 = re.findall('([0-9a-fA-F]{4,})', input)
matches2 = re.findall('0x([0-9a-fA-F]{4,})', input)
matches3 = re.findall('(0x[0-9a-fA-F]{4,})', input)

print('matches1: %s' % (str(matches1)))
print('matches2: %s' % (str(matches2)))
print('matches3: %s' % (str(matches3)))

输出

^{pr2}$

说明

  • matches1不加选择地匹配4个或更多个字符且在十六进制范围内的任何内容。通过将输入中的“tgey736zde”改为“tgey736de”来进行实验
  • matches2有效地说,捕获以0x开头的超过4个字符的任何十六进制字符串,忽略0x
  • matches3有效地说捕获任何以0x开头的超过4个字符的十六进制字符串,但包括0x

额外信息

为了使其更有效,您可能还需要研究如何使用lookaheads

相关问题 更多 >