如何使用正则表达式解析python上的文本以从
之类的内容中提取有效的段落靠近住宿\ n \ n附近的住宿是一个住宿的情况。通过改变镜片的形状,适应性将耐火能力调节到观察对象的距离。问题是
我想提取
附近的住宿是一个住宿的情况。通过改变镜头的形状,适应性将耐火能力调整到观察对象的距离。
这意味着有效的文本应该以一段时间结束并摆脱类似&#34的问题;问题是"这是一个未完成的句子以及\ n。
等字符之前的任何内容另一个例子是
<p>
神经末梢中可用的多巴胺水平由单胺氧化酶控制,这会使突触前的神经递质失活。</p>
\ n \ n</body></html>
哪个应该提取
神经末梢中可用的多巴胺水平由单胺氧化酶控制,其使突触前的神经递质失活。
所以也要摆脱任何html标签
所以我需要在一段时间内结束的干净段落。没有任何换行符或html标签可能会在相关段落之后或之前出现。所有段落或多或少都与我提供的例子相似。
答案 0 :(得分:1)
我建议从主要任务中删除HTML标记(您应该not do with regex),例如with this solution.
然后可以使用以下正则表达式解决剩下的任务:
(?:^|\n|\.)(.*\.)
我们首先匹配文本的开头(^
),新行或文字点。 ?:
只是为了使这个组不被捕获。然后我们收集所有内容直到一个点,以贪婪的方式(意味着我们得到最大可能的匹配)。
您可以像这样使用它:
import re
m = re.findall(r"(?:^|\n|\.)(.*\.)", your_string)
if m:
print(m[0].strip())
答案 1 :(得分:1)
关键是能够准确地陈述以下条件:
在你的情况下,这些似乎是
由于正则表达式默认为greedy,因此结束条件将应用于最长匹配,因此获得多个不包含延续条件的句子。这给出了正则表达式 [A-Z] [^ \ n&lt;&gt;] + \。:
from scipy.linalg import block_diag
pd.DataFrame(block_diag(*df_list))
0 1 2 3 4
0 1 2 0 0 0
1 3 4 0 0 0
2 0 0 5 6 7
3 0 0 8 9 X
4 0 0 Y Z 0
使用您提供的内容:
>>> import re
>>> matcher = re.compile('[A-Z][^\n<>]+\.')
随意根据需要进行调整。