特定字符串的正则表达式

燕鸥实验室

我正在尝试以 xlsx 形式为survey123 编写正则表达式代码,以一次仅匹配以下场景之一。该字段可以具有以下之一:

[1-9]{1,3} or 
[0-9]{1,3}/[0-9]{1,3}  or
[0-9]{1,3}/[0-9]{1,3};[0-9]{1,3}/[0-9]{1,3}

第二部分(;[0-9]{1,3}/[0-9]{1,3})重复了未指定的次数。

但是我希望在它们所处的场景中使用/;required ,而在它们不存在的场景中则不允许。我的代码不起作用。有人可以帮我解决这个问题吗?

我已经尝试([0-9]{1,3}\/[0-9]{1,3}\;[0-9]{1,3}\/[0-9]{1,3})|([0-9]{1,3})|([0-9]{1,3}\/[0-9]{1,3})过在线测试器https://regexr.com/?32jph但我无法匹配2/30/2

不应该有任何前导零。

我在数鸟。如果鸟类是一种难以区分性别的鸟类,我只计算鸟类的总数(1-999)。如果可以确定物种性别,那么我记录雄性/雌性的数量(0/1 或 2/3)。当我有不止一组可以确定性别的相同物种时,我会记录雄性/雌性;雄性/雌性;雄性/雌性(0/2;2/3;4/0;1/1)最多为该物种的组数。当我将这些输入到survey123 中时,我希望正则表达式需要正确的格式。

可接受的条目示例如下:

1  
99  
887 
104  
180  
0/99  
300/0  
2/3  
65/3  
1/2;2/0  
1/2;2/0;9/50;3/2;0/1  
乔纳森·莱夫勒

第一步是让正则表达式识别不带前导零的整数 0..999;“单数”示例可能需要 1..999 变体。

没有前导零意味着:

[1-9][0-9]{0,2}

这不包括 0(所以它涵盖了 1..999)。添加 0 本身需要与此等效的东西(有替代方法可以实现相同的结果):

(0|[1-9][0-9]{0,2})

现在您需要将其构建为识别单个数字;一对用斜杠分隔的数字 0..999 将是:

(0|[1-9][0-9]{0,2})/(0|[1-9][0-9]{0,2})

由分号分隔的此类数字对的列表将是:

(0|[1-9][0-9]{0,2})/(0|[1-9][0-9]{0,2})(;(0|[1-9][0-9]{0,2})/(0|[1-9][0-9]{0,2}))*

因此,整个正则表达式需要是:

(0|[1-9][0-9]{0,2})|(0|[1-9][0-9]{0,2})/(0|[1-9][0-9]{0,2})(;(0|[1-9][0-9]{0,2})/(0|[1-9][0-9]{0,2}))*

您可以根据需要添加锚点(例如^$)。/如果您的宿主语言坚持/使用正则表达式,您可能需要转义

转换为 Perl 并带有锚点,在行首和行尾留出空间,但中间不允许留出空间,产生:

#!/usr/bin/env perl

use strict;
use warnings;

my $qr = qr%
            ^ \s* (
            (0|[1-9][0-9]{0,2}) |
            (0|[1-9][0-9]{0,2})/(0|[1-9][0-9]{0,2}) (;(0|[1-9][0-9]{0,2})/(0|[1-9][0-9]{0,2}))*
            ) \s* $
            %x;

while (<>)
{
    chomp;
    if ($_ =~ m/$qr/)
    {
        print "Matches: $_\n";
    }
    else
    {
        print "Failed: $_\n";
    }
}

这相当冗长,但还算清楚。qr% … %x符号编译了一个分布在多行中的正则表达式,其中正则表达式中的空格并不重要。有很多捕获括号可能应该是非捕获的,但这是 Perl 正则表达式的一个特性,在其他地方不一定可用。

鉴于样本数据:

1  
99  
887  
2/3  
65/3  
1/2;2/0  
1/2;2/0;9/50;3/2;0/1
2x/3
elephant
0
0/0
1/2;3/4;7/8;15/16;31/32;63/64;127/128;255/256;511/512
1000
1234/234
234/1234

输出是:

Matches: 1  
Matches: 99  
Matches: 887  
Matches: 2/3  
Matches: 65/3  
Matches: 1/2;2/0  
Matches: 1/2;2/0;9/50;3/2;0/1
Failed: 2x/3
Failed: elephant
Matches: 0
Matches: 0/0
Matches: 1/2;3/4;7/8;15/16;31/32;63/64;127/128;255/256;511/512
Failed: 1000
Failed: 1234/234
Failed: 234/1234

失败符合我的预期。唯一有争议的行是0and 可能0/0(你只显示尾随0,而不是前导0)。调整很容易。

Perl的将允许我使用\d到位的[0-9]; 由于您没有说明您使用的是什么,因此不清楚这是否适合您。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

正则表达式匹配特定字符串

来自分类Dev

正则表达式提取特定的字符串

来自分类Dev

正则表达式特定的匹配字符串

来自分类Dev

正则表达式排除特定字符串?

来自分类Dev

特定字符串格式的正则表达式

来自分类Dev

正则表达式与特定字符串匹配

来自分类Dev

特定字符串的正则表达式

来自分类Dev

正则表达式排除特定字符串

来自分类Dev

特定字符串/路径的正则表达式

来自分类Dev

尝试使用特定的正则表达式表达式拆分字符串

来自分类Dev

正则表达式到以特定子字符串结尾的字符串

来自分类Dev

用于匹配字符串的特定子字符串的正则表达式

来自分类Dev

使用正则表达式从字符串中提取特定字符串

来自分类Dev

正则表达式匹配直到满足特定字符串或字符串结尾

来自分类Dev

对以特定子字符串结尾的字符串进行正则表达式

来自分类Dev

正则表达式如果后面跟特定字符串则排除字符串

来自分类Dev

通过正则表达式提取字符串之间的特定字符串

来自分类Dev

如何使用正则表达式从字符串中删除特定字符串

来自分类Dev

正则表达式,用于替换特定子字符串前后的特定字符

来自分类Dev

正则表达式匹配没有特定尾随字符的特定字符串

来自分类Dev

通过正则表达式从正则表达式添加字符串

来自分类Dev

正则表达式:为字符串编辑正则表达式

来自分类Dev

正则表达式:匹配包含特定字母的特定长度的字符串?

来自分类Dev

正则表达式在python中的特定字符串之间提取特定数据

来自分类Dev

匹配特定 url 和特定查询字符串的正则表达式

来自分类常见问题

TCL正则表达式可从特定特殊字符中修剪字符串

来自分类Dev

在正则表达式中选择具有特定字符的字符串

来自分类Dev

如何使用正则表达式替换子字符串中的特定字符?

来自分类Dev

正则表达式限制字符串中特定字符的出现次数

Related 相关文章

  1. 1

    正则表达式匹配特定字符串

  2. 2

    正则表达式提取特定的字符串

  3. 3

    正则表达式特定的匹配字符串

  4. 4

    正则表达式排除特定字符串?

  5. 5

    特定字符串格式的正则表达式

  6. 6

    正则表达式与特定字符串匹配

  7. 7

    特定字符串的正则表达式

  8. 8

    正则表达式排除特定字符串

  9. 9

    特定字符串/路径的正则表达式

  10. 10

    尝试使用特定的正则表达式表达式拆分字符串

  11. 11

    正则表达式到以特定子字符串结尾的字符串

  12. 12

    用于匹配字符串的特定子字符串的正则表达式

  13. 13

    使用正则表达式从字符串中提取特定字符串

  14. 14

    正则表达式匹配直到满足特定字符串或字符串结尾

  15. 15

    对以特定子字符串结尾的字符串进行正则表达式

  16. 16

    正则表达式如果后面跟特定字符串则排除字符串

  17. 17

    通过正则表达式提取字符串之间的特定字符串

  18. 18

    如何使用正则表达式从字符串中删除特定字符串

  19. 19

    正则表达式,用于替换特定子字符串前后的特定字符

  20. 20

    正则表达式匹配没有特定尾随字符的特定字符串

  21. 21

    通过正则表达式从正则表达式添加字符串

  22. 22

    正则表达式:为字符串编辑正则表达式

  23. 23

    正则表达式:匹配包含特定字母的特定长度的字符串?

  24. 24

    正则表达式在python中的特定字符串之间提取特定数据

  25. 25

    匹配特定 url 和特定查询字符串的正则表达式

  26. 26

    TCL正则表达式可从特定特殊字符中修剪字符串

  27. 27

    在正则表达式中选择具有特定字符的字符串

  28. 28

    如何使用正则表达式替换子字符串中的特定字符?

  29. 29

    正则表达式限制字符串中特定字符的出现次数

热门标签

归档