gpt4 book ai didi

c# - 为什么我的 RegEx 会根据平台得到两个不同的结果?

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

我有一个 RegEx 模式:

@"((?(?!\.\d)\D)*)(\d*\.\d+|\d+)*((?(?<=\d).*))"

旨在将字符串分成 3 部分。如果我有琴弦

"asdf1234asdf"
"asdf .1234asdf"
"asdf. .1234asdf"
"asdf 12.34asdf"
"asdf123.4 asdf"
"asdf.1234asdf"

我需要:

1. "asdf"     2. "1234"    3. "asdf"
1. "asdf " 2. ".1234" 3. "asdf"
1. "asdf. " 2. ".1234" 3. "asdf"
1. "asdf " 2. "12.34" 3. "asdf"
1. "asdf" 2. "123.4" 3. " asdf"
1. "asdf" 2. ".1234" 3. "asdf"

但根据我使用的平台,结果会发生变化。

Regex101.com gives me the results i need

though in Regexstorm.com i have to modify the if statement in the Regex to a non-capturing group for it to work

即:我需要将其更改为

@"((?(?!\.\d)\D)*)(\d*\.\d+|\d+)*((?(?<=\d).*))"

@"((?:(?!\.\d)\D)*)(\d*\.\d+|\d+)*((?(?<=\d).*))"

让它在 .NET 中工作

那么为什么我需要去掉“if” block 呢? .NET 不支持 if block 吗?

最佳答案

与 C# 相比,RegEx 更类似于英语。它是一种用于定义模式的语言,可以在字符串中找到匹配项。每种语言都需要实现它们的正则表达式引擎,因此大多数语言之间存在差异,但概念基本相同。通常,表达式越复杂,就越有可能不跨平台兼容。这就是为什么当被问到一个模糊的 RegEx 问题时,每个人都会问 SO 用户他们使用什么编程语言。

这就是为什么像 RegEx101 这样的工具需要有多种“口味”来彻底测试表达式。您还会注意到“快速引用”内容(包含标记、量词等的备忘单)随着引擎之间的变化而变化。

维基百科: Comparison of regular expression engines.

关于c# - 为什么我的 RegEx 会根据平台得到两个不同的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32255963/

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