当包含" $"的文字时,Regex.IsMatch无法正常工作

时间:2016-06-21 07:15:48

标签: c# winforms

Regex.IsMatch方法在检查以下条件时返回错误的结果,

string text = "$0.00";
Regex compareValue = new Regex(text);
bool result = compareValue.IsMatch(text);

以上代码返回" False" 。如果我错过任何事情,请告诉我。

4 个答案:

答案 0 :(得分:3)

[TestClass] public class ChooseProductViewModelTest { ChooseProductViewModel chooseProduct; private EventAggregatorMock eventAggregator; private ProductRepositoryMock productRepository; private CategoryRepositoryMock categoryRepository; private PosDeviceSettingsMock posDeviceSettings; [TestInitialize] public void Init() { eventAggregator = new EventAggregatorMock(); productRepository = new ProductRepositoryMock(); categoryRepository = new CategoryRepositoryMock(); posDeviceSettings = new PosDeviceSettingsMock(); chooseProduct = new ChooseProductViewModel(productRepository, categoryRepository, eventAggregator, posDeviceSettings); } [TestMethod] public void ProductImageConfiguration_Verification_With_ProductItemViewModel() { chooseProduct = new ChooseProductViewModel(productRepository, categoryRepository, eventAggregator, posDeviceSettings); Assert.IsTrue((chooseProduct.Items.First() as ProductItemViewModel).hasProductImages); } } 类有一种特殊方法可以转义模式中的字符:Regex.Escape()

更改您的代码:

Regex

答案 1 :(得分:2)

“$”是C#正则表达式中的特殊字符。首先逃脱它。

Regex compareValue = new Regex(@"\$0\.00");
bool result = compareValue.IsMatch("$0.00");

正则表达式:https://msdn.microsoft.com/en-us/library/az24scfc(v=vs.110).aspx

答案 2 :(得分:2)

你必须转义 $因为它是一个特殊的(保留的)字符,这意味着"字符串结束"。如果.仅表示点(例如,小数点分隔符),您也必须将其转义(当未转义时,.表示"任何符号"):

string pattern = @"\$0\.00";

bool result = RegEx.IsMatch(text, pattern);

至于原始模式,没有机会匹配任何字符串,因为$0.00表示

   $ end of string, followed by
   0 zero
   . any character
   0 zero
   0 zero

字符串的结尾不能跟......

答案 3 :(得分:2)

两者'。' '$'是特殊字符,因此如果你想匹配字符本身,你需要转义它们。 ''匹配任何字符,'$'匹配字符串的结尾

请参阅:https://regex101.com/r/pK2uY6/1