![](/img/trans.png)
[英]Extract text between two substrings using regular expression multiline in python
[英]Extract substrings with regular expression
假设我有一个字符串:
L1045 +++$+++ u0 +++$+++ m0 +++$+++ BIANCA +++$+++ They do not!
我需要将名称 - BIANCA 和末尾的文本提取到两个变量中。 我试着这样做:
dialogue = "L1045 +++$+++ u0 +++$+++ m0 +++$+++ BIANCA +++$+++ They do not!"
name : str = ""
line : str = ""
name = re.findall('^L.*\s(.+?)\s.*', dialogue)
但我对使用正则表达式有点困惑。 如何使用正则表达式解决这个问题?
谢谢!
你可以不用re
data = "L1045 +++$+++ u0 +++$+++ m0 +++$+++ BIANCA +++$+++ They do not!"
parts = data.split('+++$+++')
print(parts[-2].strip())
print(parts[-1].strip())
输出
BIANCA
They do not!
您可以使用此正则表达式:
[ \t]([^+]+)[ \t]\+{3}\$\+{3}[ \t]+([^+]+)$
Python:
import re
dialogue = "L1045 +++$+++ u0 +++$+++ m0 +++$+++ BIANCA +++$+++ They do not!"
>>> re.findall(r'[ \t]([^+]+)[ \t]\+{3}\$\+{3}[ \t]+([^+]+)$', dialogue)
[('BIANCA', 'They do not!')]
您还可以拆分和切片:
>>> re.split(r'[ \t]\+{3}\$\+{3}[ \t]', dialogue)[-2:]
['BIANCA', ' They do not!']
但是如果没有找到+++$+++
split 和 slice 不会优雅地失败; 上面的搜索模式确实如此。
您可以在字符串的开头匹配L
,并使用量词{n}
设置出现次数以匹配+++$+++
后跟非空白字符。
^L\S*(?: \+{3}\$\+{3} \S+){2} \+{3}\$\+{3} (\S+) \+{3}\$\+{3} (.+)$
模式匹配:
^
字符串开始L\\S*
匹配L
后跟可选的非空白字符(?: \\+{3}\\$\\+{3} \\S+){2}
使用量词,重复 2 次匹配分隔符后跟 1+ 个非空白字符\\+{3}\\$\\+{3}
匹配分隔符(\\S+)
捕获组 1 ,匹配 1+ 个非空白字符以匹配BIANCA
\\+{3}\\$\\+{3}
匹配分隔符(.+)
捕获组 2 ,匹配除换行符以外的任何字符的 1+ 次以匹配They do not!
$
字符串结尾
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.