【发布时间】:2022-10-16 07:50:49
【问题描述】:
我必须将字符串与值列表匹配,并找出匹配的值。
值列表
USD
U S D
U/S/D
UNITED STATES DOLLARS
我使用了下面的模式。
(U|UNITED)(.)?(\s)?(S|STATES)(.)?(\s)?(D|DOLLARS)(.)?
我还使用Regex.Matches 来确定匹配字符串的值。
它适用于以下字符串,除非 testdata 具有 UNITEDSTATESDOLLARS.
regex.matches 只返回美国.
缺少 DOLLARS 的几个字母。
如何修复正则表达式以检索所有匹配的单词UNITEDSTATESDOLLARS
| Test data | Output value |
|---|---|
| testUSD | USD |
| testU.S.D | U.S.D |
| testU/S/D | U/S/D |
| testUNITEDSTATESDOLLARS | UNITEDSTATESDO** |
【问题讨论】:
-
这里有两个问题。首先,正则表达式将尝试首先匹配左侧的内容,因此如果您希望在出现时匹配
DOLLARS而不仅仅是字母D和后面的字母,您应该将DOLLARS放在组中的第一位.其次,除非您使用不区分大小写的标志,否则Dollars将不匹配DOLLARS。确保您使用不区分大小写标志或更改它在模式中查找的内容。 -
谢谢。更新了模式。模式中的措辞区分大小写。
-
我想你的意思是
\.不是.因为.匹配任何字符但是\.匹配一个句点。否则,您的表达式将匹配UPSIDE之类的内容。另外,我认为您想要(DOLLARS|D),而不是(D|DOLLARS),因此它更喜欢先匹配较长的单词。 -
将 DOLLARS 更改为首先匹配并添加 \.最后解决了我的问题。“(U|UNITED)(.)?(\s)?(S|STATES)(.)?(\s)?(DOLLARS|D)(\.)?”非常感谢
标签: c#