正则表达式获取列
Regex get column
给定以下 ;
分隔字符串:
a;; z
toy;d;hh
z;
d;23
;;io;
b y;b;12
a;b;bb;;;34
我希望获得第一列不是 d
、b y
或 toy
.
的任何行的第 3 列(如果存在)
所以期望的结果是
z
io
bb
到目前为止我有这个正则表达式:
^(?!(d|b y|toy);([^;\r\n]*);([^;\r\n]*)).*\R
如图所示demo
据我所知,至少有两个问题:
第一列中包含d
的第5行是匹配的,不应该
比赛没有返回分组
任何帮助将不胜感激
您可以使用此正则表达式来匹配第三列中的所需值:
^(?!d|b y|toy)(?:[^;\n]*;){2}([^;\n]+)
它断言字符串不以 d
、b y
或 toy
开头,然后跳过两列值并捕获组 1 中的第三列。通过添加 .*
到该正则表达式的末尾,然后 ^.*$
到正则表达式,我们可以丢弃任何与第一个正则表达式不匹配的内容,只需替换为 </code>:</p>
<pre><code>^(?!d|b y|toy)(?:[^;\n]*;){2}([^;\n]+).*$|^.*$
我想你可以使用
^(?:([^\r\n;]*)(?:;(?!(?:23|b)(?=;|$))([^\r\n;]*)(?:;([^\r\n;]*))?.*)?|.*)$
^
- 字符串开头
(?:([^\r\n;]*)(?:;(?!(?:23|b)(?=;|$))([^\r\n;]*)(?:;([^\r\n;]*))?.*)?|.*)
- 非捕获组:
([^\r\n;]*)(?:;(?!(?:23|b)(?=;|$))([^\r\n;]+)(?:;([^\r\n;]*))?.*)?
-
([^\r\n;]*)
- 第 1 组:除 LF、CR 和 ;
之外的 0+ 个字符
(?:;(?!(?:23|b)(?=;|$))([^\r\n;]+)(?:;([^\r\n;]*))?.*)?
- 一个可选的非捕获组:
;
- 一个分号
(?!(?:23|b)(?=;|$))([^\r\n;]*)
- 除 CR、LF 和 ;
之外的 0 个或更多字符 但不等于 23
或 b
(?:;([^\r\n;]*))?
- 一个可选的非捕获组匹配 ;
然后捕获到组 X 0+ 个字符,而不是 LF、CR 和 ;
.*
- 除换行字符外的任何 0+ 个字符,尽可能多
|
- 或
.*
- 除换行字符外的任何 0+ 个字符,尽可能多
$
- 字符串结尾。
给定以下 ;
分隔字符串:
a;; z
toy;d;hh
z;
d;23
;;io;
b y;b;12
a;b;bb;;;34
我希望获得第一列不是 d
、b y
或 toy
.
所以期望的结果是
z
io
bb
到目前为止我有这个正则表达式:
^(?!(d|b y|toy);([^;\r\n]*);([^;\r\n]*)).*\R
如图所示demo
据我所知,至少有两个问题:
第一列中包含d
的第5行是匹配的,不应该
比赛没有返回分组
任何帮助将不胜感激
您可以使用此正则表达式来匹配第三列中的所需值:
^(?!d|b y|toy)(?:[^;\n]*;){2}([^;\n]+)
它断言字符串不以 d
、b y
或 toy
开头,然后跳过两列值并捕获组 1 中的第三列。通过添加 .*
到该正则表达式的末尾,然后 ^.*$
到正则表达式,我们可以丢弃任何与第一个正则表达式不匹配的内容,只需替换为 </code>:</p>
<pre><code>^(?!d|b y|toy)(?:[^;\n]*;){2}([^;\n]+).*$|^.*$
我想你可以使用
^(?:([^\r\n;]*)(?:;(?!(?:23|b)(?=;|$))([^\r\n;]*)(?:;([^\r\n;]*))?.*)?|.*)$
^
- 字符串开头(?:([^\r\n;]*)(?:;(?!(?:23|b)(?=;|$))([^\r\n;]*)(?:;([^\r\n;]*))?.*)?|.*)
- 非捕获组:([^\r\n;]*)(?:;(?!(?:23|b)(?=;|$))([^\r\n;]+)(?:;([^\r\n;]*))?.*)?
-([^\r\n;]*)
- 第 1 组:除 LF、CR 和;
之外的 0+ 个字符
(?:;(?!(?:23|b)(?=;|$))([^\r\n;]+)(?:;([^\r\n;]*))?.*)?
- 一个可选的非捕获组:;
- 一个分号(?!(?:23|b)(?=;|$))([^\r\n;]*)
- 除 CR、LF 和;
之外的 0 个或更多字符 但不等于23
或b
(?:;([^\r\n;]*))?
- 一个可选的非捕获组匹配;
然后捕获到组 X 0+ 个字符,而不是 LF、CR 和;
.*
- 除换行字符外的任何 0+ 个字符,尽可能多
|
- 或.*
- 除换行字符外的任何 0+ 个字符,尽可能多
$
- 字符串结尾。