如何过滤文本?仅保留引号内内容并在控制台输出的方法
提取文本中所有
@"..."格式内容的实现方法 嘿,这个需求用正则表达式就能轻松搞定!核心思路是精准匹配@"..."格式的片段,同时正确处理片段内部的转义字符(比如\n、\"这类)。
具体实现步骤
- 编写适配的正则表达式
我们需要匹配以@"开头、以未转义的"结尾的内容,同时保留内部所有转义字符。对应的正则模式是:
@"(?:\\.|[^"\\])*"
拆解一下这个模式的逻辑:
@":匹配开头的固定标识(?:\\.|[^"\\])*:非捕获组,用来匹配内容部分:\\.:匹配任意转义字符(比如\n、\"、\\等)[^"\\]:匹配除了双引号和反斜杠之外的任意普通字符*:表示上述内容可以重复0次或多次,覆盖整个片段内容
- 代码示例(以Python为例)
下面是完整的代码,能直接实现你的需求:
import re # 示例输入文本(包含转义字符) input_text = 'different text asdasd anasdasdd different text asdsdas @"1 my \ntext" different text different text asdsdas @"2 my text" text different text asdsdas @"3 my text" @"4 my text" asdasd anasdasdd different' # 匹配所有符合格式的片段 pattern = r'@"(?:\\.|[^"\\])*"' matched_fragments = re.findall(pattern, input_text) # 将结果用空格拼接后输出 output = ' '.join(matched_fragments) print(output)
运行这段代码后,控制台会输出:
@"1 my text" @"2 my text" @"3 my text" @"4 my text"
(注:\n会被解析为换行符,如果你需要保留原始的\n字符串形式,可以把输入文本定义为原始字符串,即r'...')
- 其他语言的适配思路
如果你用JavaScript,逻辑是一样的,只是正则的写法和调用方式略有不同:
const inputText = 'different text asdasd anasdasdd different text asdsdas @"1 my \\ntext" different text different text asdsdas @"2 my text" text different text asdsdas @"3 my text" @"4 my text" asdasd anasdasdd different'; const pattern = /@"(?:\\.|[^"\\])*"/g; const matchedFragments = inputText.match(pattern); const output = matchedFragments.join(' '); console.log(output);
这个方案能完美兼容包含转义字符的场景,不管是换行符、转义引号还是其他转义序列,都能准确捕获并保留。
内容的提问来源于stack exchange,提问作者user291334
相关产品推荐
相关产品推荐

