gpt4 book ai didi

regex - 使用先行断言正则表达式拆分字符串

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

这是一个字符串:

[1] "5 15  3 23 11 59 44.7 -.263226218521e-03  .488853402202e-11  .000000000000e+01"

我需要将前 7 个数字保留在一起的某些空格将其拆分,如下所示:
[1] "5 15  3 23 11 59 44.7" "-.263226218521e-03"  ".488853402202e-11"  ".000000000000e+01"

因此,我尝试使用前瞻正则表达式按后跟点或减号的空格进行拆分:
strsplit(mystring,"(?=[-.]) +",perl=T)

或者
strsplit(nraw,"(?=[-.])\\s+",perl=T)

但是正则表达式在任何地方都不匹配,输出原始字符串。

我究竟做错了什么?

最佳答案

如果要在后跟 - 的空格上进行拆分或 . ,那么您需要在找到空间后使用前瞻。

strsplit(mystring, " +(?=[-.])", perl=TRUE)
#[[1]]
#[1] "5 15 3 23 11 59 44.7" "-.263226218521e-03" ".488853402202e-11"
#[4] ".000000000000e+01"

请注意,使用保留字 TRUE 被认为是一种好习惯。 (即它不能被重新定义)而不是 T ,可以重新定义。

如果由于某种原因您想先进行前瞻,那么您需要同时匹配空格和 [-.]在前瞻内部,然后匹配正则表达式之外的相同空间:
strsplit(mystring, "(?= +[-.]) +", perl=TRUE)
[[1]]
[1] "5 15 3 23 11 59 44.7" "-.263226218521e-03" ".488853402202e-11"
[4] ".000000000000e+01"

这是有效的,因为前瞻是零宽度的,这意味着它实际上并不消耗这些字符或从初始匹配位置向前移动。您会在比赛开始时停留,这使您可以在前瞻之外再次匹配相同的空间。

由于前瞻的零宽度性质,您的原始方法不起作用。您实际上是在要求提前查看当前位置,而不实际向前移动,以查看是否存在 .- .然后,如果找到,请在同一位置查找一个或多个空格。在您找到 . 的地方不能有空格或 - .

关于regex - 使用先行断言正则表达式拆分字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34486910/

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