虽然StackOverflow上有几个与此类似的帖子,但当目标字符串是其中一个子字符串之后的一个空格时,它们都不会出现这种情况。
我有以下字符串(example_string):
<insert_randomletters>[?] I want this string.Reduced<insert_randomletters>
我想提取&#34;我想要这个字符串。&#34;从上面的字符串。随机数字将始终改变,但引用&#34;我想要这个字符串。&#34;将始终位于[?]
(最后一个方括号后面的空格)和缩小之间。
现在,我可以执行以下操作来提取&#34;我想要这个字符串&#34;。
target_quote_object = re.search('[?](.*?)Reduced', example_string)
target_quote_text = target_quote_object.group(1)
print(target_quote_text[2:])
这消除了始终出现在我提取的字符串开头的]
和,因此只打印&#34;我想要这个字符串。&#34;但是,这个解决方案似乎很难看,我宁愿让
re.search()
返回当前目标字符串而不做任何修改。我怎么能这样做?
答案 0 :(得分:4)
您的'[?](.*?)Reduced'
模式与文字?
匹配,然后捕获除换行符之外的任何0 +字符,尽可能少到第一个Reduced
子字符串。 [?]
是由非转义括号组成的字符类,字符类中的?
是文字?
字符。这就是为什么您的第1组包含]
和空格。
要使正则表达式匹配[?]
,您需要转义[
和?
,它们将作为文字字符进行匹配。此外,您需要在]
之后添加一个空格,以确保它不会进入第1组。更好的想法是使用\s*
(0个或更多个空格)或\s+
( 1次或更多次)。
使用
re.search(r'\[\?]\s*(.*?)Reduced', example_string)
请参阅regex demo。
import re
rx = r"\[\?]\s*(.*?)Reduced"
s = "<insert_randomletters>[?] I want this string.Reduced<insert_randomletters>"
m = re.search(r'\[\?]\s*(.*?)Reduced', s)
if m:
print(m.group(1))
# => I want this string.
请参阅Python demo。
答案 1 :(得分:1)
解决方案原来是:
target_quote_object = re.search('] (.*?)Reduced', example_string)
target_quote_text = target_quote_object.group(1)
print(target_quote_text)
然而,Wiktor的解决方案更好。
答案 2 :(得分:1)
可能
<button>Click</button>
答案 3 :(得分:1)
你[co] / [笑]使用Positive Lookbehind (?<=\[\?\])
:
import re
pattern=r'(?<=\[\?\])(\s\w.+?)Reduced'
string_data='<insert_randomletters>[?] I want this string.Reduced<insert_randomletters>'
print(re.findall(pattern,string_data)[0].strip())
输出:
I want this string.
答案 4 :(得分:0)
与其他答案一样,这可能没有必要。或者只是过于冗长的Python。
此方法使用常见的字符串方法之一find
。
str.find(sub,start,end)
将返回子字符串sub
中第一次出现str[start:end]
的索引,如果找不到,则返回 -1 。 [?]
的索引为Reduced
。打印出结果子字符串。[?]...Reduced
模式时,索引都会更新为字符串的其余部分。从该索引继续搜索。 s = ' [?] Nice to meet you.Reduced efweww [?] Who are you? Reduced<insert_randomletters>[?] I want this
string.Reduced<insert_randomletters>'
idx = s.find('[?]')
while idx is not -1:
start = idx
end = s.find('Reduced',idx)
print(s[start+3:end].strip())
idx = s.find('[?]',end)
$ python splmat.py
Nice to meet you.
Who are you?
I want this string.