gpt4 book ai didi

c++ - 我可以用正则表达式做到这一点吗?

转载 作者:行者123 更新时间:2023-11-30 04:35:25 25 4
gpt4 key购买 nike

我需要一个正则表达式或类似的规则,可用于解析包含空格分隔词的任何给定输入字符串,以创建通常更长的输出字符串,其中某些部分会根据特定条件进行扩展。我可以创建代码从头开始执行此操作,但我想知道我是否不需要这样做,因为这并不像看起来那么简单。

在下面的示例中,我将使用“a b c etc...”来表示单词,例如“cake 14 h etc...”很容易,但是“a b c etc...”更易于使用描述规则应该如何工作。我还使用特殊字符 {、}、[、|和 ]。在这样做时,我并不是指这些字符可能具有的正则表达式含义。

我还将包括示例中不应存在的换行符,以提高可读性。

该规则将指定在输入字符串中出现的 {} 包围内的所有内容都不会按原样出现在输出字符串中。 {} 的内容会出现在同一个地方,但会重复多次,由它的 [] 围栏定义。

1.

请注意,'b' 和 'c' 用 '|' 分隔。

{a [b | c]}

应该变成:

a b
a c

2.

请注意,'b' 和 'c' 在一起并且与 'd' 分开。 {} 外壳包含两个 [],第一个包含两个元素,第二个包含 3 个元素,总共 6 个。

{[a b | c][d | e | f]}

应该变成:

a b d
a b e
a b f
c d
c e
c f

3.

现在来看一个更复杂的例子。

{a [b c | d] e f [g | h | i]} j

应该变成:

a b c e f g
a b c e f h
a b c e f i
a d e f g
a d e f h
a d e f i
j

没有换行符,这样它应该是:

a b c e f g a b c e f h a b c e f i a d e f g a d e f h a d e f i j

这里有两个来自 DR Seuss 的更具体的例子,添加了换行符以使事情更容易阅读,第二个例子是对原文进行了大量编辑:

输入:

{I do not like [them in a box | them with a fox | them in a house
| them with a mouse | them here or there | them anywhere | green
eggs and ham | them, Sam-I-am].}

输出:

I do not like them in a box.
I do not like them with a fox.
I do not like them in a house.
I do mot like them with a mouse.
I do not like them here or there.
I do not like them anywhere.
I do not like green eggs and ham.
I do not like them, Sam-I-am.

输入:

{[Would | could] you} ? {Would you [like | eat] them
[in a house | with a mouse]?}

输出:

Would you, could you?

Would you like them in a house?
Would you like them with a mouse?

Would you eat them in a house?
Would you eat them with a mouse?

理想情况下,{} 外壳应该能够堆叠。这些示例均未显示堆叠 {} 外壳。

我已经可以从它们的编号(第一个、第二个等...)或其他标签中引用单个单词,这比例如查找单个字母更容易,因为我存储文本的方式使整个输入有些偏移。

最佳答案

您可能想看看 Boost.Spirit.Qi .据我所知,您可以解析表达式并将其表示为 DAG ,比如这个(只是花括号中的部分):

           start
|
a
/ \
/ \
b c d
\ /
\ /
e
|
f
/|\
/ | \
g h i
\ | /
\|/
stop

然后您只需生成通过该 DAG 的每条可能路径。

关于c++ - 我可以用正则表达式做到这一点吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5298040/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com