我有一个关于正则表达式(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的示例:
这是使用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/