【问题标题】:Which substring of the string1 matches with the string2string1 的哪个子串与 string2 匹配
【发布时间】:2011-02-04 18:39:21
【问题描述】:

有两个字符串。

String str1="Order Number Order Time Trade Number";

String str2="Order Tm"; 那我想知道 str2str1 中的哪个子串匹配。

string regex = Regex.Escape(str2.Replace(@"\ ", @"\s*");
bool isColumnNameMatched = Regex.IsMatch(str1, regex, RegexOptions.IgnoreCase);

我正在使用正则表达式,因为“Order Tm”也将匹配“Order Time”。它给出了匹配是否发生的布尔值。

就像str2="Order Tm" 一样,它应该像在 str1,Order Time 中一样返回是发生匹配的子字符串。

【问题讨论】:

    标签: c# .net winforms string-matching


    【解决方案1】:

    您的问题非常不清楚,您的代码无法编译。
    有一些问题:

    1. 您将"\ " 替换为@"\s*" - 但您应该只替换" " 而没有\
    2. 您不能以这种方式使用Regex.Escape()。它会使你的\ 加倍,并导致另一个不工作的正则表达式。例如,您的 \s* 将变为 \\s*
    3. 您似乎只想匹配一个单词(这就是您的问题不清楚的地方)。在这种情况下,您应该匹配 "Order|Tm" 之类的内容
    4. 要获得匹配的单词,您需要grouping construct

    例子:

    var str1 = "Order Number Order Time Trade Number";
    var str2 = "(Order|Tm)";
    string regex = str2.Replace( @" ", @"\s*" );
    var match = Regex.Match( str1, regex );
    
    match.Success; // results in "true"
    match.Value; // results in "Order"
    

    【讨论】:

    • @tanascius,谢谢先生,但我不明白为什么会有 Order|Tm ?
    • @Harikrishna:那是alternation construct。您可以查看喜欢的网址。这意味着您的正则表达式匹配Order Tm
    • 好的,先生,我明白了,如果有像买/卖这样的字符串,那么我该如何匹配买-卖到那个字符串?
    • @Harikrishna:当您需要匹配不同的字符时,您可以使用.,例如:buy.sell. 将匹配任何字符,因此 buy/sellbuy-sell 都将匹配
    猜你喜欢
    • 1970-01-01
    • 2013-05-11
    • 2014-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-14
    • 2010-11-15
    相关资源
    最近更新 更多