c语言 0 123 23456 3456789,正则表达式 求救:匹配连续数字如,123,456.

c语言 0 123 23456 3456789,正则表达式 求救:匹配连续数字如,123,456.各位好 小弟近日 有一需求 需要匹配连续的数字 如 123 456 正则表达式可以解决这个问题吗 39 个解决方案 1 那你就写在一个组里面 123 456 然后再去做别的匹配嘛 2 d 3 学习 4 引用 1 楼 zhengqian529 的回复

大家好,我是讯享网,很高兴认识大家。

各位好,

小弟近日 有一需求,需要匹配连续的数字,如123,456,正则表达式可以解决这个问题吗?

39 个解决方案

#1

那你就写在一个组里面(123)(456)然后再去做别的匹配嘛

#2

[\d]*

#3

学习

#4

引用 1 楼 zhengqian529 的回复:

那你就写在一个组里面(123)(456)然后再去做别的匹配嘛

我是想要通用 的写法啊,1234、呢?我需要匹配连续出现的N个数字。并希望能够匹配连续递减的数字。比如54321,98765,432等等。

#5

写JS用IF条件应该好控制一点

#6

[\d]+没有特殊的要求这个就够了

#7

不好意思,看错了

#8

这个嘛,自己写个程序就行了.

用有限自动机.

#9

这种复杂得 匹配 不如 函数判断来得 实在

#10

正则? 不可能吧

#11

//Try it.

string str = @"54321,98765,,432,98745";

Regex objRegex = new Regex(@"(?<=\D|^)(?:(?:9(?=8|\D))?(?:8(?=7|\D))?(?:7(?=6|\D))?(?:6(?=5|\D))?(?:5(?=4|\D))?(?:4(?=3|\D))?(?:3(?=2|\D))?(?:2(?=1|\D))?(?:1(?=0|\D))?(?:0(?=\D|$))?)(?=\D|$)");

MatchCollection objMatches = objRegex.Matches(str);

int i=0;

foreach (Match m in objMatches)

{

}

/*

//Result:

Result[1]:54321

Result[2]:98765

Result[3]:

Result[4]:432

*/

#12

//用C++写的用有限自动机解决这个匹配的程序.

//希望对你有帮助.

#include

#include

#include

#include

using namespace std;

int dfa[128][128];

void init()

{

for (int i = '0'; i

}

void match(const char* str)

{

int state = 0;

int last = 0;

for (int i = 0;; ++i)

{

char c = str[i];

if (!c)

{

if (i>last)

{

for (int j = last; j

puts("");

}

break;

}

if (dfa[state][c] == 0)

{

if (i>last)

{

for (int j = last; j

puts("");

}

if (isdigit(c)) state = c, last = i;


讯享网

else state = 0, last = i + 1;

}

else

{

state = dfa[state][c];

}

}

puts("");

}

int main()

{

init();

match("abc123abc3465");

match("123a1bc123abc");

return 0;

}

#13

这个用语句判断简单点

#14

有请

过客来优化。

引用 11 楼 rainsome 的回复:

C# code//Try it.string str=@"54321,98765,,432,98745";

Regex objRegex=new Regex(@"(?<=\D|^)(?:(?:9(?=8|\D))?(?:8(?=7|\D))?(?:7(?=6|\D))?(?:6(?=5|\D))?(?:5(?=4|\D))?(?:4(?=3|\D))?(?:3(?=2|\D))?(?:2(?=1|\D))?(?:1(?=0|\D))?(?:0(?=\D|$))?)(?=\D|$)");

MatchCollection objMatches= objRegex.Matches(str);int i=0;foreach (Match min objMatches)

{

}/*

//Result:

Result[1]:54321

Result[2]:98765

Result[3]:

Result[4]:432*/

#15

正则不是用来做这个的,直接用正则实现不了这功能,需要结合其它判定来实现

但是这样用正则是完全没必要的,这种功能完全可以自己写有穷自动机来实现,要比正则处理灵活快速得多

#16

比较好的做法: 使用正则表达式

^\d+$

#17

引用 14 楼 rainsome 的回复:

有请过客来优化。

引用 11 楼 rainsome 的回复:

C# code//Try it.string str=@"54321,98765,,432,98745";

Regex objRegex=new Regex(@"(? <=\D|^)(?:(?:9(?=8|\D))?(?:8(?=7|\D))?(?:7(?=6|\D))?(?:6(?=5|\D))?(?:5(?=4|\D))?(?:4(?=3|\D))?(?:3(?=2|\D))?(?:2(?=1|\D))?(?:1(?=0|\D))?(?:0(?=\D|$))?)(?=\D|$)");

MatchCollection objMatches= objRegex.Matches(str);int i=0;foreach (Match min objMatches)

{

}/*

//Result:

Result[1]:54321

Result[2]:98765

Result[3]:

Result[4]:432*/

哈哈,居然这样用,穷举了,好,晚上回去优化一下

#18

可以先提取数字在来判断啊

#19

等待优化结果了

#20

正则用于这方面应该不可取,通过分分割字符串,判断是否连续

#21

这个用正则?

#22

引用 14 楼 rainsome 的回复:

Regex objRegex=new Regex(@"(? <=\D|^)(?:(?:9(?=8|\D))?(?:8(?=7|\D))?(?:7(?=6|\D))?(?:6(?=5|\D))?(?:5(?=4|\D))?(?:4(?=3|\D))?(?:3(?=2|\D))?(?:2(?=1|\D))?(?:1(?=0|\D))?(?:0(?=\D|$))?)(?=\D|$)");

又考虑了下,这个问题用正则来解决终究还是不可取的

14楼的实现上有bug,比如

string str = @"98765";

是匹配不到任何值的

但即使修改了bug,需要考虑的情况也是比较多,不适合用一个正则来解决,如果非要用正则,可以用正则来提取数字子串,再通过自己写逻辑来验证是否连续的数字

其实这种需求不用正则更好一些,直接写逻辑也不会是多困难的事

#23

用DFA的方法我已经示范过了...只需要O(n)的扫描.只示例了上升的,下降的可以再扫描一遍.

#24

fffffff

#25

引用 11 楼 rainsome 的回复:

C# code//Try it.string str=@"54321,98765,,

小讯
上一篇 2025-03-02 11:31
下一篇 2025-03-09 16:52

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/17312.html