【发布时间】:2021-10-02 09:53:38
【问题描述】:
我有这些字符串示例(以特定字符串开头:(例如:S,然后是由. 分隔的蛇形大小写,有时后跟()):
T.name.other_name.another_name
T.name.again_name.ect_name.last_name()
我正在尝试使用正则表达式来匹配所有蛇案例部分(没有.),但如果后面跟着(),则不是最后一个。
所以匹配应该是:
nameother_nameanother_name
nameagain_nameetc_name(而不是last_name)。
但我找不到。 我该怎么做?
如果匹配项包括 . 也可以:
name.other_name.another_name
name.again_name.ect_name(但不是.last_name())
我试过这个正则表达式:
T((\.([a-z]|\_)*)*)(\.([a_z]|\_)\(\))?
并想提取第二组比赛,但它总是包含last_name。
【问题讨论】:
-
好吧,试试
(?<=T(?:\\.[a-z_]+)*\\.)[a-z_]+\\b(?!\\(\\))(已经正确转义,不要加反斜杠)。 -
T(\.([a-z]|\_)+\b(?!\(\)))*(\.([a_z]|\_)+\(\))?这是你的正则表达式,除了 \b 指定单词结束和 (?!()) 确保模式不跟随 () -
如果上述方法不起作用,请尝试另一种模式,
"(?:\\G(?!\\A)|T)\\.\\K[a-z_]+\\b(?!\\(\\))"。演示地址为regex101.com/r/u3RdTm/1 和regex101.com/r/u3RdTm/2。 -
简单的like this 还不够吗?
-
@Scratte VSCode 在不同的组件中使用了 3 种不同的正则表达式风格,所以还不是很清楚。但是,OP 共享的链接证明这不是 Rust 正则表达式。所以,要么是 JS,要么是 Onigmo/Oniguruma。我上面的一种模式应该可以工作,但我们不能 100% 确定。