正则表达式 - 匹配单字符之前的单词,但不匹配双字符?

发布于 2024-11-09 23:07:01 字数 290 浏览 2 评论 0原文

冰岛:国家\n欧洲::大陆\n雷克雅未克:城市

具有上述字符串,我想匹配出现在单个冒号之前的单词,但不匹配出现在双冒号之前的单词。另外,如果单个冒号之前有空格,我希望它被忽略并匹配空格之前的单词。

所以从上面的字符串我想匹配“冰岛”(没有尾随空格)和“雷克雅未克”。

我认为创建捕获组会起作用,但事实并非如此:

/(\w+(?=:))(?!=::)/gm

我不知道如何忽略单个冒号之前的空格。

Iceland :Country\nEurope::Continent\nReykjavik:City

with the above string, i would like to match words that appear before a single colon, but not those before a double-colon. additionally, if there is whitespace before a single colon, i would like it to be ignored and match the word before the whitespace.

so from the above string i would like to match "Iceland"(without the trailing space) and "Reykjavik".

i thought that creating capture groups would work, but it doesn't:

/(\w+(?=:))(?!=::)/gm

i don't know how to ignore white space before a single colon.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

情深缘浅 2024-11-16 23:07:01

我认为您只是否定前瞻断言的语法错误......它是 (?!pattern),而不是 (?!=pattern)。

所以尝试:

/(\w+(?=:))(?!::)/gm

[编辑 - 错过了问题的其他部分]

要忽略空格,只需匹配它但不捕获它。

perl -nle 'print $1 if /(\w+)\s*(?=:)(?!::)/gm'
hello  ::there   :dude

...打印“那里”。

I think you just have the syntax wrong for the negative look-ahead assertion... It's (?!pattern), not (?!=pattern).

So try:

/(\w+(?=:))(?!::)/gm

[edit - missed the other part of the question]

To ignore the whitespace, just match it but do not capture it.

perl -nle 'print $1 if /(\w+)\s*(?=:)(?!::)/gm'
hello  ::there   :dude

...prints "there".

抹茶夏天i‖ 2024-11-16 23:07:01
(\w+)\s*:(?!:)

看来这对你来说可能是一场胜利

(\w+)\s*:(?!:)

Look like it might be a win for you

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文