【问题标题】:Using Visual Studio and C# capturing only whole words in Regular expressions使用 Visual Studio 和 C# 仅捕获正则表达式中的整个单词
【发布时间】:2015-05-06 19:34:43
【问题描述】:

我有很多正则表达式用于从字符串中捕获信息。我正在使用的正则表达式的一个示例是捕获像“1ALPHA”这样的单词:

string numUpperCaseStr = "[0-9][A-Z]+";

如果在使用这些正则表达式时遇到这种情况,我很好奇的是我可以在正则表达式中做些什么来确保我只用其他正则表达式捕获整个单词。例如,我可能有另一个正则表达式,例如:

string allUpperStr = "[A-Z][A-Z]+";

如果我使用该正则表达式,我将从 1ALPHA 捕获 ALPHA,但我不想这样做。我可以做些什么来限制正则表达式中的这些场景?

【问题讨论】:

  • 不确定 C# 是否会接受这一点,但您可以尝试类似:\d[A-Z]+
  • 我很难理解您想知道什么...您有可以发布的代码 sn-p 吗?这样我们就可以更轻松地看到您想要做什么。

标签: c# regex visual-studio-2013


【解决方案1】:

你必须使用单词边界:

string allUpperStr = "\b[A-Z][A-Z]+\b"; 

【讨论】:

  • 你对使用非贪婪+有什么想法?或 *?
  • 我认为贪心运算符在这种情况下没有用。它用于仅捕获最大的结果并忽略内部可接受的结果。你的例子是一种“相反”的问题,你想避免抓住任何东西。
【解决方案2】:

您可以使用以下内容:

(^|\s)([A-Z]{2,})(\s|$)

您想要的信息将在第二个捕获组中:Sample

【讨论】:

    【解决方案3】:

    假设您的单词是空格分隔的,您可以修改正则表达式以仅返回以空格开头和结尾的项目。然后可以使用匹配组提取实际单词

    (^|\s)([0-9][A-Z]+)(\s|$)
    

    通过在要返回的单词部分周围放置括号,然后您可以使用匹配组访问该段

    【讨论】:

      猜你喜欢
      • 2012-09-12
      • 1970-01-01
      • 2017-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多