🎉

正規表現 オンライン教材の基本編をJulia言語で解いた

2023/03/25に公開

http://www2.otani.ac.jp/fkdsemi/seikihyogen/mondai.html の基本編をJulia言語で解きました。

解答

module TestMatch
using Test

function main()
    @testset "数字の取り出し" begin
        reg_exp = r"[1-9]?\d"

        @test occursin(reg_exp, "0") == true
        @test occursin(reg_exp, "1") == true
        @test occursin(reg_exp, "7") == true
        @test occursin(reg_exp, "19") == true
        @test occursin(reg_exp, "45") == true
        @test occursin(reg_exp, "79") == true
        @test occursin(reg_exp, "99") == true
    end

    @testset "単語ごとに取り出す" begin
        reg_exp = r"(.*)"

        @test occursin(reg_exp, "パン") == true
        @test occursin(reg_exp, "トマト") == true
        @test occursin(reg_exp, "チーズ") == true
        @test occursin(reg_exp, "ハム") == true
        @test occursin(reg_exp, "卵") == true
        @test occursin(reg_exp, "マヨネーズ") == true
    end

    @testset "5の倍数を検索" begin
        reg_exp = r"(0|5)$"

        @test occursin(reg_exp, "5") == true
        @test occursin(reg_exp, "7") == false
        @test occursin(reg_exp, "10") == true
        @test occursin(reg_exp, "14") == false
        @test occursin(reg_exp, "20") == true
        @test occursin(reg_exp, "90") == true
        @test occursin(reg_exp, "138") == false
        @test occursin(reg_exp, "205") == true
    end

    @testset "2の倍数を検索" begin
        reg_exp = r"(0|2|4|6|8)$"

        @test occursin(reg_exp, "2") == true
        @test occursin(reg_exp, "4") == true
        @test occursin(reg_exp, "5") == false
        @test occursin(reg_exp, "7") == false
        @test occursin(reg_exp, "16") == true
        @test occursin(reg_exp, "73") == false
        @test occursin(reg_exp, "64") == true
        @test occursin(reg_exp, "122") == true
    end

    @testset "日付への一致1" begin
        reg_exp = r"\d{1,2}/\d{1,2}"

        @test occursin(reg_exp, "1月1日") == false
        @test occursin(reg_exp, "5/21") == true
        @test_skip occursin(reg_exp, "10/46") == false
        @test occursin(reg_exp, "7/14") == true
        @test occursin(reg_exp, "3/6") == true
        @test occursin(reg_exp, "6月7日") == false
    end

    @testset "基礎的な置換1" begin
        string = "近代的なオフィスにはコンピューターは無くてはならない存在です。コンピューターの導入は、作業の効率化やペーパーレス化をもたらしました。"
        reg_exp = r"コンピューター"
        expected = "近代的なオフィスにはコンピュータは無くてはならない存在です。コンピュータの導入は、作業の効率化やペーパーレス化をもたらしました。"

        @test replace(string, reg_exp => "コンピュータ") == expected
    end

    @testset "基礎的な置換1" begin
        string = "<h1>Python入門</h1><h2>Pythonとはどんな言語か</h2><p>Pythonは、コンパイルを必要としないスクリプト言語の一つで、欧米ではPerlに次ぐほどの人気を誇っています。</p>"
        reg_exp = r"(<h1>)|(</h1>)|(<h2>)|(</h2>)(<p>)|(</p>)"
        expected = "Python入門Pythonとはどんな言語かPythonは、コンパイルを必要としないスクリプト言語の一つで、欧米ではPerlに次ぐほどの人気を誇っています。"

        @test replace(string, reg_exp => "") == expected
    end
end
end

if abspath(PROGRAM_FILE) == @__FILE__
    using .TestMatch

    TestMatch.main()
end

感想

プログラマー雑談というポッドキャストを聞きながら、解きました。普段のプログラミングとは異なり独特の考え方が求められていて、難しいですね〜。

Discussion