gpt4 book ai didi

regex - 正则表达式从Python到Kotlin

转载 作者:行者123 更新时间:2023-12-02 13:19:36 25 4
gpt4 key购买 nike

我有一个关于正则表达式(Regex)的问题,我真的是新手。我找到了一个用Python编写的正则表达式教程,该教程删除了数据并将其替换为空字符串。
这是来自Python的代码:

import re

def extract_identity(data, context):
"""Background Cloud Function to be triggered by Pub/Sub.
Args:
data (dict): The dictionary with data specific to this type of event.
context (google.cloud.functions.Context): The Cloud Functions event
metadata.
"""
import base64
import json
import urllib.parse
import urllib.request

if 'data' in data:
strjson = base64.b64decode(data['data']).decode('utf-8')
text = json.loads(strjson)
text = text['data']['results'][0]['description']

lines = text.split("\n")
res = []
for line in lines:
line = re.sub('gol. darah|nik|kewarganegaraan|nama|status perkawinan|berlaku hingga|alamat|agama|tempat/tgl lahir|jenis kelamin|gol darah|rt/rw|kel|desa|kecamatan', '', line, flags=re.IGNORECASE)
line = line.replace(":","").strip()
if line != "":
res.append(line)

p = {
"province": res[0],
"city": res[1],
"id": res[2],
"name": res[3],
"birthdate": res[4],
}

print('Information extracted:{}'.format(p))

在上述功能中,信息的提取是通过删除所有带有正则表达式的e-KTP标签来完成的。

这是e-KTP的示例:
enter image description here

这是使用python代码扫描该e-KTP之后的结果:
Information extracted:{'province': 'PROVINSI JAWA TIMUR', 'city': 'KABUPATEN BANYUWANGI', 'id': '351024300b730004', 'name': 'TUHAN', 'birthdate': 'BANYUWANGI, 30-06-1973'}

这是上面 code的完整教程。

然后我的问题是,是否可以像在python代码中那样,在Kotlin中使用Regex从e-KTP的结果中删除标签?因为我尝试了一些我理解的逻辑,但并没有删除e-KTP的标签。我在Kotlin中的代码是这样的:
....

val lines = result.text.split("\n")
val res = mutableListOf<String>()
Log.e("TAG LIST STRING", lines.toString())
for (line in lines) {
Log.e("TAG STRING", line)
line.matches(Regex("gol. darah|nik|kewarganegaraan|nama|status perkawinan|berlaku hingga|alamat|agama|tempat/tgl lahir|jenis kelamin|gol darah|rt/rw|kel|desa|kecamatan"))
line.replace(":","")

if (line != "") {
res.add(line)
}
Log.e("TAG RES", res.toString())

}
Log.e("TAG INSERT", res.toString())
tvProvinsi.text = res[0]
tvKota.text = res[1]
tvNIK.text = res[2]
tvNama.text = res[3]
tvTgl.text = res[4]

....

这是我的代码的结果:
TAG LIST STRING: [PROVINSI JAWA BARAP, KABUPATEN TASIKMALAYA, NIK 320625XXXXXXXXXX, BRiEAFAUZEROMARA, Nama, TempatTgiLahir, Jenis keiamir, etc]

TAG INSERT: [PROVINSI JAWA BARAP, KABUPATEN TASIKMALAYA, NIK 320625XXXXXXXXXX, BRiEAFAUZEROMARA, Nama, TempatTgiLahir, Jenis keiamir, etc]

标签仍然存在,是否可以使用Regex或类似Kotlin的Python中的标签删除标签?

最佳答案

重点是将 kotlin.text.replace Regex一起用作搜索参数。例如:

text = text.replace(Regex("""<REGEX_PATTERN_HERE>"""), "<REPLACEMENT_STRING_HERE>")

您可以使用
line = line.replace(Regex("""(?i)gol\. darah|nik|kewarganegaraan|nama|status perkawinan|berlaku hingga|alamat|agama|tempat/tgl lahir|jenis kelamin|gol darah|rt/rw|kel|desa|kecamatan"""), "")

请注意,模式开头的 (?i)是使整个模式不区分大小写的快速方法。

另外,当您需要将 .与正则表达式匹配时,需要对其进行转义。由于反斜杠可以通过多种方式编码,并且人们经常无法正确执行反斜杠,因此始终建议在原始字符串文字中定义正则表达式模式,因此在Kotlin中,您可以使用三重双引号字符串文字,即 """...""",其中每个 \被视为文字反斜杠,用于形成正则表达式转义符。

关于regex - 正则表达式从Python到Kotlin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59624098/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com