我正在尝试使用regex来匹配满足以下条件的内容:
我从一个文件中逐行阅读:
f = open("test.js", 'r')
lines = f.readlines()
for line in lines:
matches = regex.findall(line)
if matches:
print(matches)
首先,我尝试使用以下模式匹配汉字:
re.compile(r"[\u4e00-\u9fff]+")
它工作并给我输出:
['下载失成功']
['下载失败']
['绑定监听']
['该功能暂未开放']
然后我尝试用以下模式排除“/”,并将其与上面的模式结合起来:
re.compile(r"^(?=^(?:(?!//).)*$)(?=.*[\u4e00-\u9fff]+).*$")
它给了我输出:
[' showToastByText("该功能暂未开放");']
这几乎是正确的,但我想要的只是汉字部分。你知道吗
我试着加上“()”,但就是找不到我想要的部分。你知道吗
如有任何建议,我们将不胜感激,谢谢:)
你不需要一个积极的展望来获得汉字(因为它不会匹配任何东西)。因此,我们可以重写该部分,使之与
.*
进行延迟匹配,直到找到所需的字符。你知道吗因此,使用:
^(?=^(?:(?!//).)*$).*?([\u4e00-\u9fff]+).*$
你的第一个抓捕组将是汉字
你不需要这么复杂的正则表达式来否定输入中的
//
并捕获按顺序出现的汉字。对于丢弃包含//
的行来说,这个(?!.*//)
负向前看就足够了,对于捕获中文文本来说,您可以使用这个regex[^\u4e00-\u9fff]*([\u4e00-\u9fff]+)
来捕获,您的整个regex变成这样您可以从第一个分组模式中提取汉字。你知道吗
以上正则表达式的解释:
^
-字符串开头(?!.*//)
-如果//
出现在前面任何一行中,则将丢弃匹配项的负向前看[^\u4e00-\u9fff]*
-可选地匹配零个或多个非中文字符([\u4e00-\u9fff]+)
-捕获一个或多个汉字,然后放入第一个分组模式。你知道吗Demo
编辑:下面是示例代码,显示如何从group1捕获文本
指纹
Online Python Demo
编辑:用于提取注释中提到的多次出现的汉字
由于要提取多次出现的汉字,可以检查字符串是否不包含
//
,然后使用findall
提取所有中文文本。下面是一个示例代码,演示了相同的指纹
Online Python demo
相关问题 更多 >
编程相关推荐