Вы можете использовать следующее регулярное выражение, чтобы найти все различные комбинации и извлечь информацию о номере спальни,
(\w+\+?) *(?:double +)?bed(?:room)?s?|bed(?:room)?s?:? *(\d+\+?)
Чтобы точно перечислить только форму слова из числа, вы можете изменить (\w+)
на \b(?:one|two|Three|Four|five|six|seven|eight|nine|ten|\d+)\b
Онлайн-демонстрация
Поскольку регулярное выражение имеет группы чередования, где захваченная информация может быть доступна либо в группе 1, либо в группе 2, этот код Python показывает, как выможет извлекать данные из соответствующим образом захваченной группы в регулярном выражении,
import re
def getRoomInfo(s):
numRooms = re.search(r'(\w+\+?) *(?:double +)?bed(?:room)?s?|bed(?:room)?s?:? *(\d+\+?)', s, re.IGNORECASE)
if (numRooms):
if (numRooms.group(1) is not None):
return numRooms.group(1)
elif (numRooms.group(2) is not None):
return numRooms.group(2)
arr = ['4 bedrooms 2 bathrooms 3 carparks','3 bedroom house','Bedrooms 2, ','beds 5,','Bedrooms 1, ','2 bedrooms, 1 bathroom, ','Four bedrooms home, double garage','Four bedrooms home','Three double bedrooms home, garage','Three bedrooms home,','2 bedroom home unit with single carport.','Garage car spaces: 2, Bathrooms: 4, Bedrooms: 7,\\\\', 'Three bedroom bungalow with conservatory and", "One bedroom unit","4+ bedroom(s), 2 bathroom(s), 2 garage(s)']
for s in arr:
print(s, ' --> ', getRoomInfo(s))
Печатает следующее,
4 bedrooms 2 bathrooms 3 carparks --> 4
3 bedroom house --> 3
Bedrooms 2, --> 2
beds 5, --> 5
Bedrooms 1, --> 1
2 bedrooms, 1 bathroom, --> 2
Four bedrooms home, double garage --> Four
Four bedrooms home --> Four
Three double bedrooms home, garage --> Three
Three bedrooms home, --> Three
2 bedroom home unit with single carport. --> 2
Garage car spaces: 2, Bathrooms: 4, Bedrooms: 7,\\ --> 7
Three bedroom bungalow with conservatory and", "One bedroom unit","4+ bedroom(s), 2 bathroom(s), 2 garage(s) --> Three
Edit2: еще одна версия кода Python, где он захватывает все совпадения встрока и возвращает результат в виде списка
import re
def getRoomInfoAll(s):
matches = []
pattern = re.compile(r'(\w+\+?) *(?:double +)?bed(?:room)?s?|bed(?:room)?s?:? *(\d+\+?)', re.IGNORECASE)
for numRooms in pattern.finditer(s):
if (numRooms.group(1) is not None and len(numRooms.group(1)) > 0):
matches.append(numRooms.group(1))
elif (numRooms.group(2) is not None and len(numRooms.group(2)) > 0):
matches.append(numRooms.group(2))
return matches
arr = ['4 bedrooms 2 bathrooms 3 carparks','3 bedroom house','Bedrooms 2, ','beds 5,','Bedrooms 1, ','2 bedrooms, 1 bathroom, ','Four bedrooms home, double garage','Four bedrooms home','Three double bedrooms home, garage','Three bedrooms home,','2 bedroom home unit with single carport.','Garage car spaces: 2, Bathrooms: 4, Bedrooms: 7,\\\\', 'Three bedroom bungalow with conservatory and", "One bedroom unit","4+ bedroom(s), 2 bathroom(s), 2 garage(s)']
for s in arr:
print(s, ' --------> ', getRoomInfoAll(s))
Здесь выводятся все совпадения, найденные в строке.
4 bedrooms 2 bathrooms 3 carparks --------> ['4']
3 bedroom house --------> ['3']
Bedrooms 2, --------> ['2']
beds 5, --------> ['5']
Bedrooms 1, --------> ['1']
2 bedrooms, 1 bathroom, --------> ['2']
Four bedrooms home, double garage --------> ['Four']
Four bedrooms home --------> ['Four']
Three double bedrooms home, garage --------> ['Three']
Three bedrooms home, --------> ['Three']
2 bedroom home unit with single carport. --------> ['2']
Garage car spaces: 2, Bathrooms: 4, Bedrooms: 7,\\ --------> ['7']
Three bedroom bungalow with conservatory and", "One bedroom unit","4+ bedroom(s), 2 bathroom(s), 2 garage(s) --------> ['Three', 'One', '4+']