Regex.IsMatch方法在检查以下条件时返回错误的结果,
string text = "$0.00";
Regex compareValue = new Regex(text);
bool result = compareValue.IsMatch(text);
以上代码返回" False" 。如果我错过任何事情,请告诉我。
答案 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)
两者'。' '$'是特殊字符,因此如果你想匹配字符本身,你需要转义它们。 ''匹配任何字符,'$'匹配字符串的结尾