python - 范围中文字符和选定字符组的正则表达式
问题描述
我正在尝试从带有 [NAME] 和 [PLACE] 等附加字符组的字符串中获取所有中文句子。
我有这个字符串
<DisplayName>凡人战争</DisplayName>
<Desc>[NAME]赶到[PLACE],发现战火正燃,此地百姓饱受战争之苦。</Desc>
<Display>劝停战争</Display>
<OKResult><![CDATA[me:AddMsg(XT("[NAME]以仙法摄走两军首领,一番劝戒,迫使他们停止了战争 ...
我想找到
凡人战争
[NAME]赶到[PLACE],发现战火正燃,此地百姓饱受战争之苦
[NAME]以仙法摄走两军首领,一番劝戒,迫使他们停止了战争,消弭了这场祸事
此举手段温和,虽无人知晓,但却顺应天道,[NAME]获得了一些功德
我知道中文字符正则表达式是[\u4e00-\u9fff\uFF0C]+
和组字符(\u005BNAME\u005D)
,(\u005BPLACE\u005D)
但是如何结合它。
我尝试用python编写这种方式
Array_of_words = re.findall(r'[\u4e00-\u9fff\uFF0C(\u005BNAME\u005D)(\u005BPLACE\u005D)]+', text)
但另外标记单个字母和括号,如下所示:
['N', 'N', '凡人战争', 'N', '[NAME]赶到[PLACE],发现战火正燃,此地百姓饱受战争之苦', '劝停战争', '[C', 'A', 'A[', 'A', 'M', '(', '(', '[NAME]以仙法摄走两军首领,一番劝戒,迫使他们停止了战争,消弭了这场祸事', '此举手段温和,虽无人知晓,但却顺应天道,[NAME]获得了一些功德', '))', 'A', 'P', '(', '(', '))', '()', ']]']
解决方案
您可以使用
re.findall(r'(?:\[(?:PLACE|NAME)]|[\u4e00-\u9fff\uFF0C])+', text)
细节
(?:
- 非捕获组的开始:\[(?:PLACE|NAME)]
-[
, 然后 要么PLACE
要么NAME
然后]
|
- 或者[\u4e00-\u9fff\uFF0C]
- 你的一个中国字符模式
)+
- 组的结尾,匹配一个或多个匹配项。
要匹配方括号内的任何大写 ASCII 字母,请替换\[(?:PLACE|NAME)]
为\[[A-Z]+]
.
推荐阅读
- javascript - ApexChart TypeError:更新图表时“c未定义”
- python - pandas 数据集转换以规范化数据
- javascript - 如何在不遍历整个对象的情况下引用对象中函数周围的数据?
- r - R中的交叉表显示无意义的值
- android - 在使用 Kotlin 的 android 微调器上提示微调器
- python - 从另一个 Python 文件实例化一个 Python 对象
- mysql - 如何使用慢 Order By 优化 MYSQL 查询
- c# - 在 C# 中填充 Azure 表存储表
- sql - 如何比较 SQL Server 中的两个日期值?
- r - 编写一个函数来构建所有可能模型的列表,其中每个变量都有多种类型的回归