正则表达式捕获用换行符分隔的带连字符的单词

时间:2018-10-09 06:17:46

标签: regex python-3.x regex-lookarounds

我有一个像 word- \ nword 这样的模式,即单词被连字符并用换行符分隔。

我希望输出为单词单词。我得到带有以下代码的单词\\ nword。

    text_string = "word-\nword"
    result=re.findall("[A-Za-z]+-\n[A-Za-z]+", text_string)
    print(result)

我尝试过,但是没有用,我没有结果。

   text_string = "word-\nword"
   result=re.findall("[A-Za-z]+-(?=\n)[A-Za-z]+", text_string)
   print(result)

如何实现这一目标。 谢谢!

编辑:

进行替换并运行简单的正则表达式

会有效吗?
text_string = "aaa bbb ccc-\nddd eee fff"
replaced_text = text_string.replace('-\n', '-')
result = re.findall("\w+-\w+",replaced_text)
print(result) 

或使用SomePerformance建议的方法

text_string = "word-\nword"
result=re.sub("(?i)(\w+)-\n(\w+)", r'\1-\2', text_string)
print(result)

3 个答案:

答案 0 :(得分:2)

您应该使用re.sub而不是re.findall

result = re.sub(r"(?<=-)\n+", "", test_str)

这会匹配-之后的所有新行,并将其替换为空字符串。

Demo

您也可以使用

(?<=-)\n(?=\w)

仅在其前有-且与 匹配的新行。

答案 1 :(得分:1)

如果字符串仅由该字符串组成,则纯正则表达式解决方案是使用re.sub,捕获组中的第一个单词和第二个单词,然后将这两个组回显(不包括破折号和换行符) ):

result=re.sub("(?i)([a-z]+)-\n([a-z]+)", r'\1\2', text_string)

否则,如果字符串中还有其他内容,请遍历每个匹配项并加入组:

text_string = "wordone-\nwordtwo wordthree-\nwordfour"
result=re.findall("(?i)([a-z]+)-\n([a-z]+)", text_string)
for match in result:
    print(''.join(match))

答案 2 :(得分:1)

您可以简单地用<properties>代替出现的dependencyManagement

'-\n'