匹配已给出regex的单词
我需要获取所有文本,这些文本周围有两个或两个以上的空格“\s{2,}” 鉴于以下案文:匹配已给出regex的单词,regex,scala,Regex,Scala,我需要获取所有文本,这些文本周围有两个或两个以上的空格“\s{2,}” 鉴于以下案文: IP Address Name Location Type 10.1.10.5 USLAXBOWC01RB Santa Monica, CA local 我需要摘录: 第1行:“IP地址”、“名称”、“位置”、“类型” 第2行:“10.1.10.5”、“USLAXBOWC01RB”、“加利福尼亚州圣莫尼卡”、“本地” 编辑: 符合提取条件的文本: “IP地址
IP Address Name Location Type
10.1.10.5 USLAXBOWC01RB Santa Monica, CA local
我需要摘录: 第1行:
“IP地址”、“名称”、“位置”、“类型”
第2行:
“10.1.10.5”、“USLAXBOWC01RB”、“加利福尼亚州圣莫尼卡”、“本地”
编辑:
符合提取条件的文本:
“
IP地址
”&“名称
”是两个或两个以上的空格,因此它们有资格被提取。类似地,“Santa Monica,CA
”&“local
”您尝试按照模式“\s{2,}
”分割文本
因此,在Python中,regex libre
为您提供了所有需要的工具:
import re
line = "IP Address Name Location Type"
result = re.split('\s{2,}',line)
其中:
['IP Address', 'Name', 'Location', 'Type']
编辑
我想我更理解你的问题:你更关心在\s{2,}
之间隔离一个序列,而不是拆分它。然而,在您的示例中,上面的解决方案似乎是最合适的
你要的是正则表达式,在这里:
reg1 = "[^\s](?!\s{2,})(?:.(?!\s{2,}))*[^\s]"
[^\s](?!\s{2,})
空格。为此,我使用了否定的前瞻断言(?!…)
李>
(?:…)
,该组由以下方式组成:任何字符
,后面不跟\s{2,}
李>
*
李>
[^\s]
re.findall(reg1,line)
,你应该这样做。可能有一个缺点:它检测的序列至少有两个字符长
在这种情况下,另一个更简单的正则表达式最终可以完成作业:reg2=“\s{2,}([^\s])\s{2,}”
。它选择由两个或多个空格包围的单个非空格字符。使用括号(…)
,强制只返回字符
顺便说一下,我强烈建议您查看一下文档:
希望您找到您要找的东西:-)有什么问题吗?你到底是怎么做到的?什么regex口味?对你有什么意义?为什么第一行的“IP地址”中缺少空格?第三行的“加州圣莫尼卡”是包含逗号的单个匹配,还是两个单独的匹配?为什么不使用固定宽度的文本分析器?只需在2个或更多空格上拆分即可。@Aaron edited。。让我知道,如果这解释!您使用的是什么语言/工具?那么我们是否有办法为此编写正则表达式?@codingkapoor
\s{2,}
是一个正则表达式。你的意思是你宁愿使用正则表达式来匹配
也不愿拆分
?@Aaron Scala有一个API,可以给我一个所有匹配项的列表。所以我想到了如上所述编写一个正则表达式!它将符合现有的逻辑。而且,我会学到一些新东西!:)@codingkapoor,但它也有一个API,可以通过正则表达式模式拆分字符串,good'olString.spilt(String pattern)
,这将是解决正则表达式问题的最有效方法(请注意,不使用正则表达式可能更有效)。正则表达式在这里扮演的重要角色是描述两个或更多空间的序列;您可以在拆分时将此定义用作分隔符,或者您可以费心描述这些定义和匹配/查找,但这不会很好地使用regex(这仍然可以根据现有代码很好地利用时间)没有看到Scala在之后添加过;然而,从Python到Scala的转换可能不是问题