首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >ByteArray上的Regex,以任一或

ByteArray上的Regex,以任一或
EN

Stack Overflow用户
提问于 2022-01-15 11:54:41
回答 3查看 70关注 0票数 1

我正在尝试用bytearray构建一个正则表达式。我有两种字节数组

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
data1 = b'\xa0\xa0\xa0\x81\x01\x04\x07\x00\x00\x0f2\x8e\xa0\xa0'
data2 = b'\xa0\x81\x01\x04\x07\x00\x00\x0f2\x8e\xa0\xa0'

data1data2的区别是\xa0\xa0\xa0 (data1有三重0xA0)和\xa0 (data2有单0xA0)。

我需要的是按原样获取数据(从\xa0开始到\xa0末尾),以及一种区分数据的方法,以查看数据是以三重0xA0还是以单个0xA0开头。

当我将regex构建为

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
matches = re.search(b'\xa0(.+?)\xa0', data2, re.IGNORECASE)

它适用于data2。但我不知道是单一数据还是三重数据。而且它不适用于data1 (返回为\xa0\xa0\xa0)

不起作用的是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
matches = re.search(b'\xa0\xa0\xa0(.+?)\xa0', data2, re.IGNORECASE)
matches = re.search(b'\xa0((\xa0\xa0))?(.+?)\xa0', data1, re.IGNORECASE)

如何使用正则表达式获取整个数据,并检查它是以三重还是单个0xA0开头

谢谢你的帮助,

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-01-15 12:11:37

您可以使用一个额外的捕获组来再捕获两个\xa0,一旦有匹配,就检查组。如果没有,这是类型2,否则,它是类型1:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
b'^\xa0(\xa0\xa0)?(.+?)\xa0'

在Python中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import re
rx = b'^\xa0(\xa0\xa0)?(.+?)\xa0'
m = re.search(rx, data1, re.IGNORECASE)
if m:
    if m.group(1):
        print("This is data of Type 1")
    else:
        print("This is data of Type 2")

# => This is data of Type 1 

我猜你的比赛发生在字符串的开头。如果情况并非总是如此,则需要将^替换为负查找:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
b'(?<!\xa0)\xa0(\xa0\xa0)?(.+?)\xa0'

如果当前位置紧接在查找模式前面( (?<!\xa0)是一个软/非中断空间),则\xa0模式是一个负查找模式,导致匹配失败。

票数 1
EN

Stack Overflow用户

发布于 2022-01-15 12:03:03

下面是对您的第一个正则表达式的修改:

  • 使用贪婪匹配(.+)代替非贪婪(.+?)并开始;
  • 查找1-3 \xa0 (以较长的为准)来启动字符串。

您的第一个正则表达式无法工作,因为由于不贪婪,可以捕获\xa0与下一个\xa0之间最短的字符串,即\xa0\xa0\xa0。在您可以使用startswith查看它是哪种数据之后:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# get contents
matches = re.search(b'\xa0{1,3}(.+)\xa0', data`, re.IGNORECASE)

# check type
is_like_data1 = data1.startswith(b'\xa0'*3)
票数 1
EN

Stack Overflow用户

发布于 2022-01-15 12:00:02

你的解决方案

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
matches = re.search(b'\xa0\xa0\xa0(.+?)\xa0', data2, re.IGNORECASE)

但是,您已经在data2而不是data1上应用了它。

该正则表达式将为data1找到匹配项,但不会像预期的那样为data2找到匹配项。您可以先使用这个正则表达式。如果匹配的话,那就是“三重”。然后,您可以对剩下的字节数组应用更通用的正则表达式,如果它们匹配,它们将是“单身”。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70724926

复制
相关文章
编码和Python的bytearray
GBK UTF-8  是 字符集  编码方法   ===》 Apache  nginx
py3study
2020/01/07
3760
str、bytes和bytearray编码
str是字符数据,bytes和bytearray是字节数据。它们都是序列,可以进行迭代遍历。str和bytes是不可变序列,bytearray是可变序列,可以原处修改字节。
狼啸风云
2019/12/10
1.4K0
str、bytes和bytearray编码
45.python bytearray函数
python除了 bytes字节序列 之外,还有bytearray可变的字节序列,具体区别在哪呢?顾名思义,前者是不可变的,而后者是可变的!具体本文会有详细的讲解!
猿说编程[Python和C]
2020/03/12
9990
python regex replace
正则匹配-直接内容替换 s = 'dsoheoifsdfscoopaldshfowefcoopasdfjkl;' ss = s.replace('coop','###') print(s,'\n',ss) dsoheoifsdfscoopaldshfowefcoopasdfjkl; dsoheoifsdfs###aldshfowef###asdfjkl; import re regex = re.compile(r'coop') # 正则匹配替换 regex.sub('$$$$$','sdlaf
py3study
2020/01/08
2.4K0
ByteArray转byte[]:HeapByteBuffer&DirectByteBuffer
这两个get函数,都是先创建byte[]数组并传入,然后将数据写入。注意这里就需要知道创建的byte[]数组的长度,一般使用
BennuCTech
2022/04/12
2K0
ByteArray转byte[]:HeapByteBuffer&DirectByteBuffer
浅谈C++的regex库
第四届CCCC团体程序设计天梯赛结束之后,知乎热榜出现了这个问题“如何评价第四届CCCC团体程序设计天梯赛”,这里面有些回答真的看得我笑出声,比如这个简简单单的回答:“第四届CCCC字符串大赛”。
喜欢ctrl的cxk
2019/11/07
1.2K0
Ordering列以或更好性能
为减少数据库的存储空间,需要确保对列进行排序,通常最好先放置固定大小的列,然后再添加可变长度的列。
yzsDBA
2021/04/26
3180
[Dream Big, Think Big, Achieve Big!] Regex Matching Problems 2
包子IT面试培训 助你拿到理想的offer! 有问题,问包子!Got question? Ask Baozi! 接着上一轮关于regex的博客讨论,下面我们讨论一下另一道比较常见的regular e
包子面试培训
2018/04/20
8690
boost::string or boost::regex
当中用蓝色标记出的部分(layout, local_size_x, local_size_y, local_size_z, in)为keyword,斜体字部分(a, b, c)为数据类型为unsigned int的数字,请编写一个函数,用于从文件里抽取出a, b, c的值。当中文件名称为输入參数,该函数的返回值是抽取得到的a,b,c三个值。
全栈程序员站长
2022/07/08
2.1K0
C: GNU regex library (regex.h)正则表达式调用示例
GNU regex是GNU提供的跨平台的POSIX 正则表达式库(C语言)。 我也是最近才接触这个相对于C++/Java实现来说非常简陋,勉强够用的正则表达式库。 不算GNU提供的扩展函数,POSIX标准的regex库总共就4个函数regcomp,regerror,regexec,regfree, 以下以完整源码的方式调用以上函数完成对GNU regex library的基本测试。
10km
2021/11/15
1.1K0
Python内置数据结构——bytes,bytearray
            bytes.encode(encoding = 'utf - 8',errors = 'stirct') -> bytes
py3study
2020/01/08
1.8K0
gcc报错:terminate called after throwing an instance of ‘std::regex_error‘ what(): regex
mkdir build …/./configure make & make install
花狗Fdog
2022/05/09
2.2K0
(Python3)Bytes和Bytearray操作
bytes.decode(encoding="utf-8", errors="strict")
用户7886150
2021/01/22
2.7K0
C++多维数组元素的地址 | 输出二维数组任一行任一列元素的值
array是一个数组名,array数组包含3行,及3个元素:array[0],array[1],array[2],而每一个元素又是一个一维数组,它包含4列元素。
小林C语言
2020/12/17
3.3K0
C++多维数组元素的地址 | 输出二维数组任一行任一列元素的值
Librdkafka的基础数据结构 4 --- String和ByteArray
下面要介绍的数据类型都是在kafka protocol的序列化中使用的 Kafka Protocol String Kafka Protocol ByteArray ---- Kafka Protocol String 所在文件:src/rdkafka_proto.h 表示kafka协议中的字符串,在协议的序列化中,先用2个字节表示字符串内容的长度,不包含结尾的\0, 紧随其后是字符串的内容: { uint16, data.. } 定义如下,包含长度和指向实际字符内容的指针; typedef struct
扫帚的影子
2018/09/05
5980
hive regex insert join group cli
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/118336.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/13
8210
Metaflow|Kubernetes上以人为中心的数据科学
今天,我们发布了对 Kubernetes 的一流(first-class)支持,作为Metaflow[1]对 AWS 原生服务集成的替代方案。数据科学家可以将计算扩展到 Kubernetes 集群[2],并编排由 Argo Workflows 执行流程[3]。详情可参阅我们的Kubernetes 部署指南[4]。
CNCF
2022/06/10
9570
Metaflow|Kubernetes上以人为中心的数据科学
MSVC下使用gnu regex(正则表达式C语言接口regex.h)
最近我的一个跨平台项目遇到了一个问题:需要在MSVC下调用linux下才有正则表达式C接口(regex.h)。
10km
2021/11/10
9560
深度学习优化颜色以实现伪装或突显主体
布里斯托大学的研究人员开发了一种深度学习神经网络,可以识别最小化或最大化的最佳色彩,以便主体融入背景或突显出来。在论文中,团队具体描述了网络及其可能的用途。
AiTechYun
2019/06/15
8330
点击加载更多

相似问题

以字符开头,以任一字符结尾的行的Regex

13

无法在“任一或”情况下获取regex组捕获

12

以或}结尾的Regex

11

regex:查找以*或?

11

任一或所需的验证

22
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文