使用 Julia 處理 Regex

如何只輸出 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 

--------------------------------------------------------------------------------

參考資料:

  1. Regular Expression Tutorial - Learn How to Use Regular Expressions
  2. regex101: build, test, and debug regex
  3. 因為新手只能貼兩個連結,只好麻煩您自行搜尋如何安裝 Julia 咯!
3個讚

為對 Regex 有興趣的朋友補上如下的參考資料:
正規表示法範例 | 筆記國度