正则表达式:如何搜索一个数字与0交替的序列?

1次查看(最近30天)
Serbring
Serbring 2021年8月11日
评论道: Serbring2021年8月17日
你好,
我需要设计一个正则表达式。我需要的是搜索一个数字序列(即1或2)与一个0序列交替的任何模式。所以,我搜索以下模式:
“10111”
“22200002”
“300333”
我该怎么做呢?
谢谢你!
致以最亲切的问候。
毫米
1评论
沃尔特·罗伯森
沃尔特·罗伯森 2021年8月12日
序列总是以相同的数字结尾吗?例如300330000是否有效?300334是否有效,因为它以交替序列开始,然后在那之后可以是任何东西?
“no”的变更是否也有效?比如222本身,它是“一个2的序列,后面跟着0个重复(0和2)”?
模式是否只出现在字符串的开头,或者也可能出现在字符串内部?如果它在里面,那就回答了前两个问题。

登录评论。

接受的答案

为副总经理
为副总经理 2021年8月12日
当然,我不是问正则表达式的人。我以为我已经确定了,但不得不诉诸于这个让它在MATLAB中工作。我打赌它可以更简单。
vec =“5 ad3515505546151g5454651333300342511324sgfb1565440444532152331450005534563asdf445341536404334400044453”
C = regexp(矢量,”(\ d) \ 1 * 0 + \ 1 +”“匹配”
C =1×6单元阵列
”{55055}{‘3333003’}{440444”}{500055”}{404”}{' 44000444 '}
(\ d) 匹配并捕获任何数字
\ 1 * 匹配捕获的数字的零个或多个实例
0 + 匹配一个或多个零
\ 1 + 匹配捕获的数字的一个或多个实例
1评论
Serbring
Serbring 2021年8月17日
非常感谢。有可能在前向/后向表达式中引入令牌吗?我尝试了下面的方法,但它不起作用。我在网上读到,某些正则表达式引擎不能处理令牌在无法做到这一点。
C = regexp(年代,(? < = (\ d) \ 1 *) 0 + (? = (\ 1) +) '“匹配”

登录评论。

答案(1)

斯蒂芬。
斯蒂芬。 2021年8月12日
编辑:斯蒂芬。 2021年8月12日
S =“5 ad3515505546151g545460000051333300342511324sgfb15654404440044532152331450005534563asdf4453415364043344004044453”
C = regexp(年代,”(\ d) \ 1 * (0 + \ 1 +) + '“匹配”
C =1×7单元阵列
””{55055}{0000}{‘3333003’}{‘4404440044’}{500055”}{404”}{' 440040444 '}
注意,\d也匹配零字符。如果你对 “一个数字” 排除0,则使用this:
C = regexp(年代,' ((1 - 9)) \ 1 * (0 + \ 1 +) + '“匹配”
C =1×6单元阵列
”{55055}{‘3333003’}{‘4404440044’}{500055”}{404”}{' 440040444 '}

s manbetx 845


释放

R2021a

社区寻宝

在MATLAB中心找到宝藏,并发现社区如何可以帮助你!

开始狩猎!