我正在尝试在R中编写一个匹配某个字符串的正则表达式,直到发生<RadioButtonGroup
valueSelected={this.state.cranRadio}
onChange={this.handleCRAN}
style={{ display: "flex", flexWrap: "wrap", justifyContent: "space-between" }}
name="coin"
defaultSelected="not_light"
>
<RadioButton
value="Yes"
label="Yes"
inputStyle={styles.inputStyle}
style={{ width: "auto" }}
labelStyle={{ marginLeft: "-10px" }}
/>
<RadioButton
value="No"
label="No"
style={{ width: "auto" }}
inputStyle={styles.inputStyle}
labelStyle={{ marginLeft: "-10px" }}
/>
</RadioButtonGroup>;
的点。我认为负面的预测可能就是答案,但我得到了一些误报。
所以在以下9项矢量
中.
grep
vec <- c("mcq_q9", "mcq_q10", "mcq_q11", "mcq_q12", "mcq_q1.factor", "mcq_q2.factor", "mcq_q10.factor", "mcq_q11.factor", "mcq_q12.factor")
完成向量中前六个元素的工作,匹配grep("mcq_q[0-9]+(?!\\.)", vec, perl = T)
但不 "mcq_q11"
。不幸的是,当 匹配最后3个元素时,第二个"mcq_q2.factor"
后面有两个数字。为什么第二个数字会消除我的负面预测?
答案 0 :(得分:2)
答案 1 :(得分:1)
如果要捕捉到一个点,那么你应该使用它:
mcq_q[0-9]+(?![\d\.])
示例来源(run here)
vec <- c("mcq_q9", "mcq_q10", "mcq_q11", "mcq_q12", "mcq_q1.factor", "mcq_q2.factor", "mcq_q10.factor", "mcq_q11.factor", "mcq_q12.factor")
grep("mcq_q[0-9]+(?![\\d\\.])", vec, perl = T)
答案 2 :(得分:1)
我们可以在没有任何环视的情况下使用它来匹配数字(.
)之后不是[0-9]+
的零个或多个字符,直到字符串结尾($
)
grep("mcq_q[0-9]+[^.]*$", vec, value = TRUE)
#[1] "mcq_q9" "mcq_q10" "mcq_q11" "mcq_q12"
答案 3 :(得分:1)
正如评论中所解释的那样,负面的前瞻是棘手的。但你不需要它
/mcq_q[0-9]+(?:$|[^.0-9])/
这要求一串数字后面跟着字符串结尾或非[.
,数字]字符。因此,它将允许mcq_q12a
等。如果您的允许字符串只能以数字结尾,请删除|[^...]
,然后也不需要非捕获组(?:...)
,{{1} }
仅在Perl中测试,因为问题已被标记。对于R中的示例,它应该是相同的。