1

对于未注释掉的行,我需要将 '=' 符号之后的任何文本匹配到行尾。你能建议一个适用于此的正则表达式吗?

Example:
  // Username = admin
     Username = [any text here should match regex]

  // Password = password
     Password= [any text here should match regex]

更新为以下示例:

One more example just for clarification:
  // FilePath = //test/test/test.log
     FilePath= //test/test/test.log

“=”之前的任何内容都是单词或单词组。其他任何事情都可以/将被忽略。

单词和“=”之间是否有空格无关紧要。我还不能实现“或”子句,但这是我正在尝试使用的当前正则表达式。如果您有更好的解决方案或可以帮助更新我的正则表达式以在游戏中工作:

Different permutations:
 (?<=Username=).+
 (?<=Username =).+

 (?<=Password=).+
 (?<=Password =).+

已解决: 感谢您提供所有示例和快速响应/帮助。以下两个正则表达式最适合我的情况,具体取决于我是想要“=”之后的所有匹配还是“=”之后基于“=”之前的特定单词的单个匹配。

^\s*\w+\s*=\s*(.+)$       // Returns all matches
^\s*Username\s*=\s*(.+)$  // Returns a single match for a specific field
4

5 回答 5

3

这应该有效:

^\s*\w+\s*=\s*(.+)$

这是使用此正则表达式的示例:

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string line = "     Username = [any text here should match regex]";

      Regex r = new Regex(@"^\s*\w+\s*=\s*(?<text>.+)$");
      Match m = r.Match(line);
      if (m.Success)
         Console.WriteLine(r.Match(line).Result("${text}")); 
   }
}
于 2012-10-10T19:58:16.557 回答
1

这应该是诀窍:

^\s*(?!//)\w+\s*=\s*(.*)

它说的是这样的:

^行首

\s*任意数量的空格

(?!//)没有意见

\w+至少一个单词字符(如果变量名中允许使用其他字符,则应扩展)

\s*任意数量的空格

=平等标志

(.*)该行的其余部分(在一个组中,因此您可以提取值)

于 2012-10-10T19:54:21.050 回答
0

仅当代码由换行符分隔时,此选项才有效

^\s*[^\\]+\s*=(.+)$

使用multiline选项

这里工作

于 2012-10-10T19:56:01.363 回答
0
^[^/]*=(.*)$

文本将匹配到反向引用 \1。

如果找到单个 / 则失败。

于 2012-10-10T19:56:01.790 回答
0

我可以使用以下方法来做到这一点(我$也在使用匹配换行符选项):

Section\:(?:[^\:]*(?:=.*)?\n)*\s*Field\s*=\s*(.*?)\s*$
  • Section是节标识符
  • Field是字段标识符
  • 不会匹配错误部分中的字段
  • 第一个捕获组将包含等号减去前导和尾随空格之后的所有内容
  • 值名称中允许使用文字冒号,但键名称中不允许使用冒号
  • 忽略注释字段
  • 忽略空白字段

你可以用这些东西在正则表达式上测试它:

AnotherSection:
     SomeField = x
     AnotherField = y
Section:
     SomeField = Z
     AnotherField = Q
     TricksyBlankField
     Field
     // ^ this field is blank
  // Field = ignored because I'm a comment
     Herp = : <-- literal colon
     Field =        (everything in the parentheses get captured)        
     ExtraStuff = something

RegexPal 不显示组匹配,但它存在。

于 2012-10-10T20:09:24.060 回答