设alpha
一串从集合中随机采样的元素1, 2, 3, 4, 5, 6
。例如,alpha
可以是"1132345216"
.
假设alpha
足够长以包含至少四个满足以下条件的子字符串:
- 子串以长度为s、s 和/或s
N
的序列开头,顺序任意,可能重复或缺失。例如,子字符串可以开始或。2
3
4
2222...
234234234...
- 子字符串以以下两种模式之一结尾: a
6
或多于M
字符5
。
例如,"2346"
和"23455"
会满足以下属性N = 3
: , M = 2
。
alpha
我想在Julia 中找到所有此类子字符串。当然,人们会想到正则表达式。我从形式语言理论的角度对正则表达式有些了解,但我从未在编程语言中使用过它们,并且存在差异。我没能达到想要的结果。
为任何愿意尝试此操作的人提供一个快速示例代码:
pattern_string = r"..." # What's the right regex???
# Test string to search for matches
test_string = "1111122211111 2323232234233246 5161532161 232342342322224444223323555555"
# Find all matches in the test string
matches = eachmatch(pattern_str, test_string)
# Output the matches found
println("Matches found:")
for match in matches
println(match.match)
end
在示例中,我添加了空格以提高视觉清晰度;第一个子字符串(第一个空格之前)不应该是匹配项,第二个子字符串应该是小N
; 第三个不应是匹配项,如果M
小于,则最后一个应该是匹配项6
。
假设您已经定义了
n
和m
变量,您可以使用插值字符串创建正则表达式:对于示例数据,这给出了一个模式字符串
这匹配:
[234]{10}
: 10 个2
,3
,4
, 任意顺序[1-6]*?
: 最少数量1-6
(?:6|5{6,})
: 一个6
或 6 个或更多5
对于您的示例数据,这
2323232234233246
与 和匹配232342342322224444223323555555
。regex101上的正则表达式演示
Julia 演示在线尝试!
如果我误解了您的问题,并且子字符串不允许在末尾包含
1
, or5
或except ,您可以将正则表达式更改为:6
n
这将只匹配一个或多个2
,3
or4
,后跟一个6
或m+1
多个5
s的序列。对于您的示例数据,这与相同的子字符串匹配。
Julia 演示在线尝试!