正则表达式 return 替换后仅非空
Regex return only non empty after substitution
给定 ;
分隔列的文本字符串:
a;; z
z;d;hh
d;23
;;io;
b;b;12
a;b;bb;;;34
这个正则表达式
^(?:(a|b|z)(?:;|$)([^;\r\n]*)(?:;|$)([^;\r\n]*)(?:;.*)?|.*)$
通过此替换 </code> 将 return 第 3 列(如果存在)来自第一列为 <code>a
、b
或 z
的行,如图所示demo
我的问题是,如何 return 只有非空行,如:
z
hh
12
bb
感谢您的帮助
您仍然可以使用普通的正则表达式来做到这一点:您只需要在正则表达式模式中重新安排您的两个备选方案,并在末尾添加一个可选的换行符模式。
你的模式有 ^((O)(N)(E)|.*)$
结构,所以如果第一个不匹配,第二个选择匹配整行,但是两个选择都将停止在行尾(你正在使用多行标志,所以$
匹配换行符字符或字符串结尾之前的所有位置)。因此,您需要将其转换为 ^(?:(O)(N)(E)$|.*$\R?)
:
^(?:(a|b|z)(?:;|$)([^;\r\n]*)(?:;|$)([^;\r\n]*)(?:;.*)?$|.*$\R?)
^^^^^^^^^
参见 regex demo,在 regex101 测试器中,注意使用 g
和 m
修饰符。
所以,一般来说,模式是
^
- 行首
(?:
- 非捕获组的开始(因此 ^
可以应用于两种选择):
(a|b|z)(?:;|$)([^;\r\n]*)(?:;|$)([^;\r\n]*)(?:;.*)?$
- 您的特定模式捕获必要的子字符串,直到 line/string 结束
|
- 或
.*$
- 除换行字符外的任何 0+ 个字符,尽可能多,直到
line/string结束($
),然后
\R?
- 一个可选的换行序列
)
- 小组结束。
给定 ;
分隔列的文本字符串:
a;; z
z;d;hh
d;23
;;io;
b;b;12
a;b;bb;;;34
这个正则表达式
^(?:(a|b|z)(?:;|$)([^;\r\n]*)(?:;|$)([^;\r\n]*)(?:;.*)?|.*)$
通过此替换 </code> 将 return 第 3 列(如果存在)来自第一列为 <code>a
、b
或 z
的行,如图所示demo
我的问题是,如何 return 只有非空行,如:
z
hh
12
bb
感谢您的帮助
您仍然可以使用普通的正则表达式来做到这一点:您只需要在正则表达式模式中重新安排您的两个备选方案,并在末尾添加一个可选的换行符模式。
你的模式有 ^((O)(N)(E)|.*)$
结构,所以如果第一个不匹配,第二个选择匹配整行,但是两个选择都将停止在行尾(你正在使用多行标志,所以$
匹配换行符字符或字符串结尾之前的所有位置)。因此,您需要将其转换为 ^(?:(O)(N)(E)$|.*$\R?)
:
^(?:(a|b|z)(?:;|$)([^;\r\n]*)(?:;|$)([^;\r\n]*)(?:;.*)?$|.*$\R?)
^^^^^^^^^
参见 regex demo,在 regex101 测试器中,注意使用 g
和 m
修饰符。
所以,一般来说,模式是
^
- 行首(?:
- 非捕获组的开始(因此^
可以应用于两种选择):(a|b|z)(?:;|$)([^;\r\n]*)(?:;|$)([^;\r\n]*)(?:;.*)?$
- 您的特定模式捕获必要的子字符串,直到 line/string 结束
|
- 或.*$
- 除换行字符外的任何 0+ 个字符,尽可能多,直到 line/string结束($
),然后\R?
- 一个可选的换行序列
)
- 小组结束。