以 如何只輸出 Regex 有修改的地方? 作為例子
為了推廣 Julia 語言,花了時間寫了一個 Julia 程式 Regex-02.jl 處理所提的問題。請您試試看,您會愛上 Julia 的。當然,核心其實還是使用 Regex 。可以將
REGULAR EXPRESSION
(?m)(.*?(?=\()\((?<args>(( *\w+ *) *, *)*( *\w+ *)+)\).*?|.*)
TEST STRING
function_1(A, B, C);
D = A + B;
C = 1;
function_2(num, array);
num = 1;
a(a); b(a, b); c(a, b, c); d(a, b, c, d) # 會匹配到
e(a, b , c, d , e) # 會匹配到
f() # 不會匹配到
g(a) # 會匹配到
h( a , b ) # 會匹配到
i( a b, c) # 不會匹配到
j( a, b, c, ) # 不會匹配到
k(,,,) # 不會匹配到
SUBSTITUTION
\g<args>\n
貼到 regex101 網站試一下。
如下為程式範例 Regex-02.jl:
#!julia +release
# 需要使用 Julia 1.8
# [Regular Expression Tutorial - Learn How to Use Regular Expressions](https://www.regular-expressions.info/tutorial.html)
# [regex101: build, test, and debug regex](https://regex101.com/)
# [Julia 學習筆記 | Te-Sheng Lin](https://teshenglin.github.io/post/2019_julia/)
using Pipe
text="""
function_1(A, B, C);
D = A + B;
C = 1;
function_2(num, array);
num = 1;
a(a); b(a, b); c(a, b, c); d(a, b, c, d) # 會匹配到
e(a, b , c, d , e) # 會匹配到
f() # 不會匹配到
g(a) # 會匹配到
h( a , b ) # 會匹配到
i( a b, c) # 不會匹配到
j( a, b, c, ) # 不會匹配到
k(,,,) # 不會匹配到
"""
# v1.0 r"(?m)(.*\((?<args>(( *\w+ *) *, *)*( *\w+ *)+)\).*|.*)" => s"\g<args>"
# v2.0 r"(?m)(.*?(?=\()\((?<args>(( *\w+ *) *, *)*( *\w+ *)+)\).*?|.*)" => s"\g<args>\n"
pairs1 = [
r"(?m)(.*?(?=\()\((?<args>(( *\w+ *) *, *)*( *\w+ *)+)\).*?|.*)" => s"\g<args>\n"
]
pairs2 = [
r"(?m)^ +" => s"",
r"(?s) *, *" => s", ",
r"(?s)\n+" => s"\n"
]
result = @pipe strip(text) |> replace(_, pairs1...) |> replace(_, pairs2...)
dashes = "-"^80
println("Input:\n$dashes\n$text\n$dashes")
println("Output:\n$dashes\n$result\n$dashes")
如下為執行時範例
Playground ./Regex-02.jl
Input:
--------------------------------------------------------------------------------
function_1(A, B, C);
D = A + B;
C = 1;
function_2(num, array);
num = 1;
a(a); b(a, b); c(a, b, c); d(a, b, c, d) # 會匹配到
e(a, b , c, d , e) # 會匹配到
f() # 不會匹配到
g(a) # 會匹配到
h( a , b ) # 會匹配到
i( a b, c) # 不會匹配到
j( a, b, c, ) # 不會匹配到
k(,,,) # 不會匹配到
--------------------------------------------------------------------------------
Output:
--------------------------------------------------------------------------------
A, B, C
num, array
a
a, b
a, b, c
a, b, c, d
a, b, c, d, e
a
a, b
--------------------------------------------------------------------------------
參考資料:
- Regular Expression Tutorial - Learn How to Use Regular Expressions
- regex101: build, test, and debug regex
- 因為新手只能貼兩個連結,只好麻煩您自行搜尋如何安裝 Julia 咯!