我使用的字符串包含以下字符:
0-9
a-f
A-F
-
>
大于号和连字符的组合必须为:
->
-->
下面是我目前得到的正则表达式:
[0-9a-fA-F\-\>]+
我尝试过使用^
的exclusion,但它们不起作用:
[^g-zG-Z][0-9a-fA-F\-\>]+
^g-zG-Z[0-9a-fA-F\-\>]+
[0-9a-fA-F\-\>]^g-zG-Z+
[0-9a-fA-F\-\>]+^g-zG-Z
[0-9a-fA-F\-\>]+[^g-zG-Z]
以下是一些示例:
"0912adbd->12d1829-->218990d"
"ab2c8d-->82a921->193acd7"
4条答案
按热度按时间hiz5n14c1#
首先,您不需要转义
-
和>
下面是对我有效的正则表达式:
^([0-9a-fA-F]*(->)*(-->)*)*$
下面是另一个正则表达式:
^([0-9a-fA-F]*(-+>)*)*$
正则表达式做什么?
^
匹配字符串的开头,$
匹配结尾。*
与前面标记的0个或多个示例匹配()
捕获组以匹配任何令牌。[0-9a-fA-F]
匹配范围内的任何字符。(->)
和(-->)
仅与那些给定的示例匹配。把它变成代码:
您也可以将其转换为布尔值:
输出:
我建议使用regexr.com来检查正则表达式。
7vhp5slm2#
如果必须使用不区分大小写的模式在字符串的开头或结尾显示箭头:
^
字符串开始[a-f\d]+
匹配1+字符a-f或数字(?:
作为一个整体重复的非捕获组-{1,2}>[a-f\d]+
匹配-
或--
和>
,后跟1+字符a-f或数字)+
关闭非捕获组并重复1次以上$
字符串结束请参见regex demo和Python demo。
产出
mdfafbf13#
如果我理解您的需求,您需要一个十六进制数序列(如
a01d
或11efeb23
,用带有一个或两个连字符的箭头分隔(->
或-->
))。十六进制部分的正则表达式是
[0-9a-fA-F]+
(假设它不能为空)。箭头的正则表达式可以是
-{1,2}>
或(-〉|- —〉).除了第一个十六进制数之外,只有在每个十六进制数前面需要箭头,因此您将分两部分构建最终的正则表达式:第一个数字,然后重复箭头和数字。
因此,一般结构如下:
它给出了以下正则表达式:
nkoocmlb4#
在“箭头”上输入
re.split()
,然后检查所有生成的字符串是否都是纯十六进制,这可能更直观:测试:
给出: