匹配一个多行字符串,该行在一行中不包含A,但在另一行中包含B。
困难的部分是文件包含多个这些多行构造。
最简单的部分是,如果文件包含无效的组,则正则表达式仅应返回true / false(找到/未找到)。
在我的示例中,仅当story(...)
包含bar
但不包含foo
时,我才应该匹配它。 stuff..
是可选的,它可以是0或多行随机词。
文件错误的示例:
story(
stuff..,
foo,
stuff..,
bar,
)
story(
stuff..,
bar,
) // <-- this file is bad because of this story
优质文件示例:
story(
stuff..,
foo,
stuff..,
bar,
)
story(
stuff..,
foo,
stuff..,
bar,
)
// no matches found here, the file is good
甚至可以用正则表达式来做到这一点吗?如果是这样,它将在这里工作:https://regex-golang.appspot.com/assets/html/index.html
答案 0 :(得分:1)
因此,为了演示一种使用Python的肮脏解决方案,应该可以做到这一点
>>> string_1 = '''story(
foo,
stuff,
bar,
)
story(
stuff,
bar,
) '''
>>> string_2 = '''story(
foo,
stuff,
bar,
)
story(
foo,
stupp,
bar,
)'''
>>> def bad_file(string):
import re
matches = re.findall('story\([\S\s]*?foo[\S\s]*?bar[\S\s]*?\)|(story\([\S\s]*?bar[\S\s]*?\))', string)
#matches = re.findall('story\([\S\s]*?foo[\S\s]*?bar[\S\s]*?\)|(story\([\S\s]*?\))', string)
for i in range(len(matches)):
if matches[i] != '':
print('Bad File because of:\n')
print(matches[i])
print('\n'*2)
print('List of bad matches:')
return matches
if i == (len(matches)) -1:
print('Good File')
#Output
>>> bad_file(string_1)
Bad File
>>> bad_file(string_2)
Good File