【问题标题】:Find word in string with random digits before and after [duplicate]在字符串中查找带有随机数字前后的单词[重复]
【发布时间】:2019-11-21 06:41:27
【问题描述】:

我尝试了几种来自互联网的解决方案,并通过一些教程自己解决了问题,但我无法让它发挥作用。我尝试用随机字母、数字或点匹配字符串中的单词之前和/或之后。

例如。

会议室

会议室 21

房间

会议室

会议室

12MeetingRoom110.MeetingRoom

我尝试匹配“房间”这个词,但它不应该区分大小写。

我尝试的最后一个模式是:\b()(\wRoom\w)\b \ig

但我使用正则表达式的次数不多,三个月后我很难解决问题。

我希望有人可以帮助我。

 public bool Regex_check_for_match(string input, string pattern)
 {
     bool ismatch = Regex.IsMatch(input, pattern);
     return ismatch;
 }

【问题讨论】:

  • Regex 在这里没有多大帮助,因为您基本上只想在任何地方检查Room。一般的正则表达式模式是\S*room\S*,但您甚至不需要正则表达式。
  • “房间”这个词可以被任何东西包围并且仍然被认为是匹配的吗?如果是这样,那么当前的答案/cmets 是正确的。正则表达式不是必需的。如果您受限于“房间”周围的内容,那么正则表达式将成为一种有价值的工具。

标签: c# regex


【解决方案1】:

所以你想看看输入是否包含单词房间?在这种情况下不需要正则表达式,只需做一个简单的索引检查

return culture.CompareInfo.IndexOf(input, "room", CompareOptions.IgnoreCase) >= 0

其中文化是 CultureInfo 的实例。

【讨论】:

    【解决方案2】:

    为什么要使用正则表达式?只需使用 .Contains...

    public bool CheckForMatch(string input, string pattern)
    {
        return input.Contains(pattern, StringComparison.OrdinalIgnoreCase);
    }
    

    【讨论】:

    • 我认为 contains 没有针对 ignorecase 的开箱即用选项?
    • 哎呀,你说得对,我把它作为一种扩展方法并且已经习惯了使用它 - 它使用你的答案'under-the-hood'中的代码
    【解决方案3】:

    我的猜测是,也许您可​​能想设计一个表达式来在不同的设置中查找room,例如:

    \B(room)\B|\b(room)\b|(room)
    

    示例

    using System;
    using System.Text.RegularExpressions;
    
    public class Example
    {
        public static void Main()
        {
            string pattern = @"\B(room)\B|\b(room)\b|(room)";
            string input = @"Meeting.Room
    MeetingRoom21
    Room
    Meeting2Room
    Meeting.room
    12MeetingRoom110.MeetingRoom";
            RegexOptions options = RegexOptions.IgnoreCase | RegexOptions.Multiline;
    
            foreach (Match m in Regex.Matches(input, pattern, options))
            {
                Console.WriteLine("'{0}' found at index {1}.", m.Value, m.Index);
            }
        }
    }
    

    表达式在this demo 的右上角进行了解释,如果您想探索/简化/修改它,在this link 中,您可以逐步观察它如何与一些示例输入匹配,如果你喜欢。

    【讨论】:

      【解决方案4】:

      仅供参考要匹配数字,请使用“\d”,对于非字母字符,请使用“\W”,定义匹配组时,使用括号 () 和方括号进行可选匹配

      使用http://regexstorm.net/tester 我创建了一个正则表达式......但我很困惑为什么当你只能使用 indexOf 来代替时你需要这样做

      要忽略可以使用的前置元素

      [\d\W]*(Meeting)?(Room)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-30
        相关资源
        最近更新 更多