我试过(\s|\t).*[\b\w*\s\b]
,这个几乎可以,但除了#。
#Name Type Allowable values
#========================== ========= ========================================
_absolute-path-base-uri String -
add-xml-decl Boolean y/n, yes/no, t/f, true/false, 1/0
答案 0 :(得分:2)
正如@anubhava在他的回答中所说,看起来你只需要在行的开头检查#
。正则表达式很简单,但应用正则表达式的机制变化很大,所以如果我们知道你正在使用哪种正则表达式风格/工具(例如PHP,.NET,Notepad ++,EditPad)会有所帮助临等)。这是一个JavaScript版本:
/^[^#].*$/mg
请注意修饰符:m
(“多行”)允许^
和$
在行边界匹配,g
(“全局”)允许您查找所有比赛,而不仅仅是第一场比赛。
现在让我们来看看你的正则表达式。 [\b\w*\s\b]
是一个匹配单词字符(\w
),空白字符(\s
),星号(*
)或退格({{1}的字符类}})。换句话说,\b
和*
在出现在角色类中时会失去特殊含义。
\b
匹配任何包含\s
的空白字符,因此\t
不必要地冗余,根本不需要。它在你的情况下实际做的是在每个匹配的行之前匹配换行符。在多线模式下使用(\s|\t)
时无需这样做。如果要在^
之前允许水平空格(即空格和制表符),则可以执行以下操作:
#
/^(?![ \t]*#).*$/mg
是一个负面的预测;它意味着“从这个位置开始,不可能匹配零个或多个制表符或空格后跟(?![ \t]*#)
”。在#
线锚之后,“此位置”意味着线的开始。
答案 1 :(得分:0)
试试这个:
^[A-z0-9_-]+\s+(.+)$
假设您的第一个字符串仅包含字母,数字,下划线或连字符,则第一个字符串将匹配该字符串。然后我们匹配空格,然后捕获其余的空格。但是,这完全取决于正在使用的正则表达式引擎。这是使用语言支持正则表达式,特定编辑器还是某个库?哪一个?没有标准:每个正则表达式引擎的工作方式略有不同。
答案 2 :(得分:0)
试试这个:
^[^#].*?(\s|\t)(?<Group>.*)$
找到匹配后,Group
组将包含您的字符串。
答案 3 :(得分:0)
我会使用这个正则表达式。在英语中,这表示“第一个字符不是井号(#),然后是非白色空格以匹配第一个'字',然后是空格,然后匹配整行。
^[^#]\S*\s+(.+)$
我可以建议另一种方法吗?看起来文本中的每个字段之间都有选项卡,那么为什么不逐行读取文本并按标签拆分成数组呢?
以下是C#(未经测试)中的示例:
using(StreamReader sr = new StreamReader("C:\\Path\\to\\file.txt"))
{
string line = sr.ReadLine();
while(!sr.EndOfStream)
{
//skip the comment lines
if(line.StartsWith("#"))
continue;
string[] fields = line.Split(new string[] {"\t"}, StringSplitOptions.RemoveEmptyEntries);
//now fields[0] contains the Name field
//fields[1] contains the Type field
//fields[2] contains the Allowable Values field
line = sr.ReadLine();
}
}
答案 4 :(得分:0)
在php中尝试此代码:
<?php
$s="#Name Type Allowable values
#========================== ========= ========================================
_absolute-path-base-uri String -
add-xml-decl Boolean y/n, yes/no, t/f, true/false, 1/0 ";
$a = explode("\n", $s);
foreach($a as $str) {
preg_match('~^[^#].*$~', $str, $m);
var_dump($m);
}
?>
array(0) {
}
array(0) {
}
array(1) {
[0]=>
string(79) "_absolute-path-base-uri String - "
}
array(1) {
[0]=>
string(77) "add-xml-decl Boolean y/n, yes/no, t/f, true/false, 1/0 "
}
代码非常简单,它只是忽略了一行开头的匹配#
,从而完全侵入了这些行。