我有:
TYPO3 4.2 is installed on machine ...
Winamp is installed on machine ...
Winrar 3.20 is installed on machine ...
如何制作正则表达式来分隔句子中的软件包名称。上面有一个软件\版本的示例,但句子并不总是相同,有时也没有显示版本。任何提示怎么样?我找到了这个主题,但它仅适用于版本:Regular expression for version numbers
当我读到一些评论时,我忘了写一些像:
软件版本没有标准格式,但它以点分隔
软件名称位于
答案 0 :(得分:6)
对于您显示的数据:
version = sentence.partition(" is installed on")[0]
不需要正则表达式,只需在“安装”之前取出所有内容。
答案 1 :(得分:0)
好吧,我们可以使用以下启发式方法:
然后我们可以使用以下内容:
(.*?) ([\d.]+ )?is installed
第一组是软件名称,第二组是版本(如果存在)。
快速PowerShell测试:
PS> $strings = 'TYPO3 4.2 is installed on machine ...','Winamp is installed on machine ...', 'Winrar 3.20 is installed on machine ...'
PS> $strings | %{ $null = $_ -match '(.*?) ([\d.]+ )?is installed'; "Software: " + $Matches[1] + ", version: " + $Matches[2] }
Software: TYPO3, version: 4.2
Software: Winamp, version:
Software: Winrar, version: 3.20
答案 2 :(得分:0)
请提供有关数据的更多信息(请参阅我的评论)
如果程序名称总是一个字:
m = re.search(r'(?P<name>\S+?) (?P<version>([\d.]+ )?)', text)
如果句子以“是”或“已安装”一词开头:
m = re.search(r'(?P<name>(\S\s)+?)(?P<version>([\d.]+ )?)(is|installed)', text)
name = m.group('name').strip()
version = m.group('version').strip()