You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter中如何按指定规则从长字符串中提取用户名和用户ID

实现方案

通用逻辑

你可以按照以下步骤实现提取,兼容ID为空的场景:

  • 逐行处理目标文本,先截断 wrote:及之后的所有注释内容,只保留用户名+ID的前缀部分
  • 对前缀部分用分隔符;做分割
  • 若分割后得到2个元素,第一个元素为用户名,第二个为用户ID;若仅得到1个元素,该元素为用户名,ID设为null
  • 所有提取结果建议做首尾去空格处理,规避字符串中多余的空格干扰

代码示例(Python)

字符串分割实现

def extract_user_info(line: str) -> dict:
    # 截断注释内容
    prefix = line.split('wrote:')[0].strip()
    parts = prefix.split(';')
    if len(parts) == 2:
        return {
            "username": parts[0].strip(),
            "user_id": parts[1].strip()
        }
    return {
        "username": parts[0].strip(),
        "user_id": None
    }

# 测试效果
test_lines = [
    "Mark;12345 wrote:    // Username = Mark   ID# = 12345",
    "Alex-Johnson;747645 wrote:       // Username = Alex-Johnson   ID# = 747645",
    "Felix@felix.com;83213 wrote:    // Username = Felix@felix.com   ID# = 83213",
    "Jack65;123123 wrote:      // Username = Jack65   ID# = 123123",
    "John wrote:      // Username = John   ID# = null"
]

for line in test_lines:
    print(extract_user_info(line))

正则匹配实现

也可以用正则一次性匹配提取,匹配规则为^([^;]+)(?:;(\d+))?\s+wrote::

import re

pattern = re.compile(r'^([^;]+)(?:;(\d+))?\s+wrote:')
def extract_by_regex(line: str) -> dict:
    match_res = pattern.match(line)
    if not match_res:
        return {"username": None, "user_id": None}
    return {
        "username": match_res.group(1).strip(),
        "user_id": match_res.group(2).strip() if match_res.group(2) else None
    }

内容的提问来源于stack exchange,提问作者Mark

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 00:57:02