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
相关产品推荐
相关产品推荐

