об операторах сравнения — PowerShell
- Статья
- Чтение занимает 12 мин
Краткое описание
Операторы сравнения в PowerShell могут сравнивать два значения или фильтровать элементы коллекции по входным значениям.
Подробное описание
Операторы сравнения позволяют сравнивать значения или находить значения, соответствующие заданным шаблонам. PowerShell включает следующие операторы сравнения:
Равенство
-eq
,-ieq
,-ceq
— равно-ne
,-ine
,-cne
— не равно-gt
,-igt
,-cgt
— больше-ge
,-ige
,-cge
— больше или равно-lt
,-ilt
,-clt
-le
,-ile
,-cle
— меньше или равно
Соответствующие
-like
,-ilike
,-clike
— строка соответствует шаблону с подстановочными знаками-notlike
,-inotlike
,-cnotlike
— строка не соответствует шаблону с подстановочными знаками-match
,-imatch
,-cmatch
— строка соответствует шаблону регулярных выражений-notmatch
,-inotmatch
,-cnotmatch
— строка не соответствует шаблону регулярных выражений
Замена
-replace
,-ireplace
,-creplace
— заменяет строки, соответствующие шаблону регулярных выражений.
Сдерживания
-contains
,-icontains
,-ccontains
— коллекция содержит значение-notcontains
,-inotcontains
,-cnotcontains
— коллекция не содержит значения-in
— значение находится в коллекции-notin
— значение отсутствует в коллекции
Тип
-is
— оба объекта имеют один и тот же тип-isnot
— объекты не совпадают с типом
Общие возможности
Сравнение строк не учитывает регистр, если не используется явный оператор с учетом регистра. Чтобы оператор сравнения учитывал регистр, добавьте c
после -
. Например, -ceq
— это версия с учетом регистра -eq
.
Чтобы сделать учет регистра явным, добавьте i
после -
. Например, -ieq
— это версия без учета регистра -eq
.
Если входные данные оператора являются скалярным значением, оператор возвращает
$a = (1, 2) -eq 3 $a.GetType().Name $a.Count
Object[] 0
Существует несколько исключений:
- Операторы containment и type всегда возвращают логическое значение.
- Оператор
-replace
возвращает результат замены. -match
Операторы и-notmatch
также заполняют автоматическую$Matches
переменную, если только левая часть выражения не является коллекцией.
Операторы равенства
-eq и -ne
Если левая сторона скалярна, возвращает значение True, -eq
если правая сторона является точным совпадением, в противном случае -eq
возвращает значение False
-ne
делает обратное; он возвращает значение False , если обе стороны совпадают; -ne
В противном случае возвращает значение True.Пример
2 -eq 2 # Output: True 2 -eq 3 # Output: False "abc" -eq "abc" # Output: True "abc" -eq "abc", "def" # Output: False "abc" -ne "def" # Output: True "abc" -ne "abc" # Output: False "abc" -ne "abc", "def" # Output: True
Если слева является коллекцией, возвращает те элементы, -eq
которые соответствуют правой стороне, а -ne
фильтрует их.
Пример
1,2,3 -eq 2 # Output: 2 "abc", "def" -eq "abc" # Output: abc "abc", "def" -ne "abc" # Output: def
Эти операторы обрабатывают все элементы коллекции. Пример
"zzz", "def", "zzz" -eq "zzz"
zzz zzz
Оператор равенства может сравнивать объекты разных типов. Важно понимать, что значение в правой части сравнения можно преобразовать в тип левого значения для сравнения.
Например, строка '1.0'
преобразуется в целое число для сравнения со значением 1
. В этом примере возвращается True
.
PS> 1 -eq '1.0' True
В этом примере значение 1
преобразуется в строку для сравнения со строкой '1.0'
. В этом примере возвращается False
.
PS> '1.0' -eq 1 False
Операторы равенства принимают любые два объекта, а не только скаляр или коллекцию. Но результат сравнения не гарантируется, что он будет значимым для конечного пользователя. В следующем примере демонстрируется проблема.
class MyFileInfoSet { [String]$File [Int64]$Size } $a = [MyFileInfoSet]@{File = "C:\Windows\explorer.exe"; Size = 4651032} $b = [MyFileInfoSet]@{File = "C:\Windows\explorer.exe"; Size = 4651032} $a -eq $b
False
В этом примере мы создали два объекта с одинаковыми свойствами. Тем не менее, результат проверки на равенство имеет значение False , так как они являются разными объектами. Чтобы создать сопоставимые классы, необходимо реализовать System.IEquatable<T> в классе. В следующем примере демонстрируется частичная реализация класса MyFileInfoSet , который реализует System.IEquatable<T> и имеет два свойства: File и Size. Метод Equals()
возвращает значение True , если свойства File и Size двух объектов MyFileInfoSet совпадают.
class MyFileInfoSet : System.IEquatable[Object] { [String]$File [Int64]$Size [bool] Equals([Object] $obj) { return ($this.File -eq $obj.File) -and ($this.Size -eq $obj.Size) } } $a = [MyFileInfoSet]@{File = "C:\Windows\explorer.exe"; Size = 4651032} $b = [MyFileInfoSet]@{File = "C:\Windows\explorer.exe"; Size = 4651032} $a -eq $b
True
Ярким примером сравнения произвольных объектов является определение их значения NULL. Но если необходимо определить, является $null
ли переменная , необходимо поместить $null
в левую часть оператора равенства. Положив его на правую сторону, вы не делаете то, что вы ожидаете.
Например, пусть будет $a
массивом, содержащим элементы NULL:
$a = 1, 2, $null, 4, $null, 6
Ниже приведены тесты, не $a
имеющие значения NULL.
$null -ne $a
True
Однако следующие файлы извлекает все элементы NULL из $a
:
$a -ne $null # Output: 1, 2, 4, 6
1 2 4 6
-gt, -ge, -lt и -le
-gt
, -ge
, -lt
и -le
ведут себя очень аналогично. Если обе стороны являются скалярными, они возвращают значение True или False в зависимости от того, как обе стороны сравниваются:
Оператор | Возвращает значение True, если… |
---|---|
-gt | Левая часть больше |
-ge | Левая часть больше или равна |
-lt | Левая часть меньше |
-le | Левая сторона меньше или равна |
В следующих примерах все операторы возвращают значение True.
8 -gt 6 # Output: True 8 -ge 8 # Output: True 6 -lt 8 # Output: True 8 -le 8 # Output: True
Примечание
В большинстве языков программирования оператором больше, чем является >
. В PowerShell этот символ используется для перенаправления. Дополнительные сведения см . в разделе about_Redirection.
Если левая часть является коллекцией, эти операторы сравнивают каждый член коллекции с правой стороной. В зависимости от их логики они либо сохраняют, либо отменяют элемент.
Пример
$a=5, 6, 7, 8, 9 Write-Output "Test collection:" $a Write-Output "`nMembers greater than 7" $a -gt 7 Write-Output "`nMembers greater than or equal to 7" $a -ge 7 Write-Output "`nMembers smaller than 7" $a -lt 7 Write-Output "`nMembers smaller than or equal to 7" $a -le 7
Test collection: 5 6 7 8 9 Members greater than 7 8 9 Members greater than or equal to 7 7 8 9 Members smaller than 7 5 6 Members smaller than or equal to 7 5 6 7
Эти операторы работают с любым классом, реализующим System.
‘,’&’,’*’,'(‘,’)’,’_’,’+’,’-‘,’=’, ‘{‘,’}’,'[‘,’]’,’:’,’;’,'»‘,»»,’\’,’|’,’/’,’?’,’.’,’>’,’,’,'<‘ $a -gt ‘a’ # Output: NothingЕсли обе стороны операторов не являются достаточно сопоставимыми, эти операторы вызывают неустранимую ошибку.
Операторы сопоставления
Соответствующие операторы (-like
, -notlike
, -match
и -notmatch
) находят элементы, которые соответствуют или не соответствуют заданному шаблону. Шаблон для -like
и -notlike
— это выражение с подстановочными знаками (содержащее *
, ?
и [ ]
), в то время как -match
и -notmatch
принимают регулярное выражение (регулярное выражение).
Синтаксис:
<string[]> -like <wildcard-expression> <string[]> -notlike <wildcard-expression> <string[]> -match <regular-expression> <string[]> -notmatch <regular-expression>
Если входные данные этих операторов являются скалярным значением, они возвращают логическое значение. Если входные данные являются коллекцией значений, операторы возвращают все соответствующие элементы. Если в коллекции нет совпадений, операторы возвращают пустой массив.
-like и -notlike
-like
и -notlike
ведут себя аналогично -eq
и -ne
, но справа может быть строка, содержащая подстановочные знаки.
Пример
"PowerShell" -like "*shell" # Output: True "PowerShell" -notlike "*shell" # Output: False "PowerShell" -like "Power?hell" # Output: True "PowerShell" -notlike "Power?hell" # Output: False "PowerShell" -like "Power[p-w]hell" # Output: True "PowerShell" -notlike "Power[p-w]hell" # Output: False "PowerShell", "Server" -like "*shell" # Output: PowerShell "PowerShell", "Server" -notlike "*shell" # Output: Server
-match и -notmatch
-match
и -notmatch
используйте регулярные выражения для поиска шаблона в значениях слева. Регулярные выражения могут соответствовать сложным шаблонам, таким как адреса электронной почты, UNC-пути или форматированные номера телефонов. Power\w+’
# Output: PowerShell
«Rhell», «Chell», «Mel», «Smell», «Shell» -match «hell»
# Output: Rhell, Chell, Shell
«Bag», «Beg», «Big», «Bog», «Bug» -match ‘b[iou]g’
#Output: Big, Bog, Bug
«Bag», «Beg», «Big», «Bog», «Bug» -notmatch ‘b[iou]g’
#Output: Bag, Beg
-match
и -notmatch
поддерживают группы отслеживания регулярных выражений. Каждый раз, когда они выполняются на скалярных входных данных, и -match
результат имеет значение True или -notmatch
False, они перезаписывают автоматическую $Matches
переменную. $Matches
— это хэш-таблицей , которая всегда имеет ключ с именем «0», в котором хранится все совпадение.
Если регулярное выражение содержит группы записи, $Matches
объект содержит дополнительные ключи для каждой группы.
Важно отметить, что $Matches
хэш-схема содержит только первое вхождение любого соответствующего шаблона.
Пример
$string = 'The last logged on user was CONTOSO\jsmith' $string -match 'was (?<domain>.+)\\(?<user>.+)' $Matches Write-Output "`nDomain name:" $Matches.domain Write-Output "`nUser name:" $Matches.user
True Name Value ---- ----- domain CONTOSO user jsmith 0 was CONTOSO\jsmith Domain name: CONTOSO User name: jsmith
-match
Если результат имеет значение False или -notmatch
имеет значение True или если входные данные являются коллекцией, $Matches
автоматическая переменная не перезаписывается. Следовательно, он будет содержать ранее заданное значение или $null
, если переменная не была задана. При ссылке $Matches
после вызова одного из этих операторов рекомендуется убедиться, что переменная была задана текущим вызовом оператора с помощью оператора condition.
Пример
if ("<version>1.0.0</version>" -match '<version>(.*?)</version>') { $Matches }
Дополнительные сведения см . в разделе about_Regular_Expressions и about_Automatic_Variables.
Оператор замены
Замена регулярными выражениями
Как и -match
-replace
, оператор использует регулярные выражения для поиска указанного шаблона. Но в отличие от -match
, он заменяет совпадения другим указанным значением.
Синтаксис:
<input> -replace <regular-expression>, <substitute>
Оператор заменяет все или часть значения указанным значением с помощью регулярных выражений. Оператор можно использовать для многих административных задач, таких как переименование файлов. Например, следующая команда изменяет расширения имен всех .txt
файлов на .log
:
Get-ChildItem *.txt | Rename-Item -NewName { $_.name -replace '\.txt$','.log' }
По умолчанию -replace
оператор не учитывает регистр. Чтобы обеспечить учет регистра, используйте .-creplace
Чтобы явно не учитывать регистр, используйте .-ireplace
Примеры:
"book" -ireplace "B", "C" # Case insensitive "book" -creplace "B", "C" # Case-sensitive; hence, nothing to replace
Cook book
Начиная с PowerShell 7.2, когда левый операнд в -replace
операторе оператора не является строкой, этот операнд преобразуется в строку.
PowerShell выполняет преобразование строк без учета языка и региональных параметров.
Например, если язык и региональные параметры заданы как французский (fr), строковое преобразование значения 1.2
с учетом языка и региональных параметров будет равно 1,2
.
До PowerShell 7.2:
PS> [cultureinfo]::CurrentCulture = 'fr' PS> 1.2 -replace ',' 12
В PowerShell 7.2 и более поздних версиях:
PS> [cultureinfo]::CurrentCulture = 'fr' PS> 1.2 -replace ',' 1.2
Подстановки регулярных выражений
Кроме того, можно использовать регулярные выражения для динамической замены текста с помощью захватывающих групп и подстановок. (?<DomainName>[\w-.]+)\\(?<Username>[\w-.]+)$’ $ReplaceExp = ‘${Username}@${DomainName}’ ‘Contoso.local\John.Doe’ -replace $SearchExp, $ReplaceExp
[email protected]
Предупреждение
Символ $
имеет синтаксические роли как в PowerShell, так и в регулярных выражениях:
- В PowerShell между двойными кавычками он обозначает переменные и выступает в качестве оператора subexpression.
- В строках поиска регулярных выражений он обозначает конец строки.
- В строках подстановки регулярных выражений он обозначает захваченные группы. Обязательно поместите регулярные выражения между одиночными кавычками или вставьте перед ними символ обратной связи (
`
).
Например:
$1 = 'Goodbye' 'Hello World' -replace '(\w+) \w+', "$1 Universe" # Output: Goodbye Universe 'Hello World' -replace '(\w+) \w+', '$1 Universe' # Output: Hello Universe
$$
в regex обозначает литерал $
. Это $$
значение в строке подстановки для включения литерала $
в результирующую замену. Например:
'5.72' -replace '(.+)', '$ $1' # Output: $ 5.72 '5.72' -replace '(.+)', '$$$1' # Output: $5.72 '5.72' -replace '(.+)', '$$1' # Output: $1
Дополнительные сведения см. в статье about_Regular_Expressions и подстановок в регулярных выражениях.
Подстановка в коллекции
<input>
Если оператор to -replace
является коллекцией, PowerShell применяет замену к каждому значению в коллекции. Например:
"B1","B2","B3","B4","B5" -replace "B", 'a' a1 a2 a3 a4 a5
Замена блоком скрипта
В PowerShell 6 и более поздних версиях оператор также принимает блок скрипта, -replace
который выполняет замену. Блок скрипта выполняется один раз для каждого совпадения.
Синтаксис:
<String> -replace <regular-expression>, {<Script-block>}
В блоке скрипта используйте автоматическую $_
переменную для доступа к заменяемый входной текст и другим полезным сведениям. Тип класса этой переменной — System.Text.RegularExpressions.Match.
В следующем примере каждая последовательность из трех цифр заменяется эквивалентами символов. Блок скрипта выполняется для каждого набора из трех цифр, которые необходимо заменить.
"072101108108111" -replace "\d{3}", {return [char][int]$_.Value}
Hello
Операторы вложения
Операторы вложения (-contains
, -notcontains
, -in
и -notin
) похожи на операторы равенства, за исключением того, что они всегда возвращают логическое значение, даже если входные данные являются коллекцией. Эти операторы перестают сравнивать, как только обнаруживают первое совпадение, в то время как операторы равенства оценивают все входные члены. В очень большой коллекции эти операторы возвращаются быстрее, чем операторы равенства.
Синтаксис:
<Collection> -contains <Test-object> <Collection> -notcontains <Test-object> <Test-object> -in <Collection> <Test-object> -notin <Collection>
-contains и -notcontains
Эти операторы сообщают, включает ли набор определенный элемент. -contains
Возвращает значение True , если правая сторона (тестовый объект) соответствует одному из элементов в наборе. -notcontains
Вместо этого возвращает значение False. Если объект test является коллекцией, эти операторы используют равенство ссылок, т. е. проверяют, является ли один из элементов набора одним и тем же экземпляром тестового объекта.
Примеры:
"abc", "def" -contains "def" # Output: True "abc", "def" -notcontains "def" # Output: False "Windows", "PowerShell" -contains "Shell" # Output: False "Windows", "PowerShell" -notcontains "Shell" # Output: True "abc", "def", "ghi" -contains "abc", "def" # Output: False "abc", "def", "ghi" -notcontains "abc", "def" # Output: True
Более сложные примеры:
$DomainServers = "ContosoDC1","ContosoDC2","ContosoFileServer","ContosoDNS", "ContosoDHCP","ContosoWSUS" $thisComputer = "ContosoDC2" $DomainServers -contains $thisComputer # Output: True $a = "abc", "def" "abc", "def", "ghi" -contains $a # Output: False $a, "ghi" -contains $a # Output: True
-in и -notin
Операторы -in
и появились в PowerShell 3 как синтаксический обратный оператор и -contains
-notcontains
. -notin
-in
Возвращает значение True , если левая сторона <test-object>
соответствует одному из элементов в наборе. -notin
Вместо этого возвращает значение False . Если тестовый объект является набором, эти операторы используют равенство ссылок, чтобы проверить, является ли один из элементов набора одним и тем же экземпляром тестового объекта.
В следующих примерах выполняется то же самое, что в примерах для -contains
и -notcontains
, но они написаны с помощью -in
и -notin
.
"def" -in "abc", "def" # Output: True "def" -notin "abc", "def" # Output: False "Shell" -in "Windows", "PowerShell" # Output: False "Shell" -notin "Windows", "PowerShell" # Output: True "abc", "def" -in "abc", "def", "ghi" # Output: False "abc", "def" -notin "abc", "def", "ghi" # Output: True
Более сложные примеры:
$DomainServers = "ContosoDC1","ContosoDC2","ContosoFileServer","ContosoDNS", "ContosoDHCP","ContosoWSUS" $thisComputer = "ContosoDC2" $thisComputer -in $DomainServers # Output: True $a = "abc", "def" $a -in "abc", "def", "ghi" # Output: False $a -in $a, "ghi" # Output: True
Сравнение типов
Операторы сравнения типов (-is
и -isnot
) используются для определения того, является ли объект определенным типом.
Синтаксис:
<object> -is <type-reference> <object> -isnot <type-reference>
Пример.
$a = 1 $b = "1" $a -is [int] # Output: True $a -is $b.GetType() # Output: False $b -isnot [int] # Output: True $a -isnot $b.GetType() # Output: True
См. также раздел
- about_Booleans
- about_Operators
- about_Regular_Expressions
- about_Wildcards
- Compare-Object
- Foreach-Object
- Where-Object
Сравнение строк в Python
В Python строка – это последовательность символов, причем отдельный символ тоже считается строкой. Все символы имеют разные значения Unicode или ASCII.
Строки в Python можно сравнивать. При этом, по сути, сравниваются их символы. Сравнение происходит последовательно: первый символ одной строки сравнивается с первым символом другой. Если они равны, сравниваются символы на следующей позиции.
Следует учитывать, что компьютер сравнивает не символы как таковые, а их значения в Unicode. Чем больше это значение, тем «больше» символ.
Сравнение строк осуществляется так же, как и сравнение чисел, т.е. для этого нет каких-то специальных методов. Для прямого сравнения значений строк используется оператор ==
. Если строки идентичны, возвращается True, в противном случае – False.
Для сравнения строк в Python используются разные операторы. Давайте начнем с операторов ==
и !=
, а затем разберем остальные.
Сравнение строк при помощи == и !=
Сравнение двух строк можно эффективно выполнить с помощью операторов ==
и !=
. Оператор ==
возвращает True, если строки идентичны, и False в противном случае. Оператор !=
действует наоборот.
Рассмотрим следующий пример:
language = 'chinese' print(language == 'chinese') print(language != 'chinese') # Output: # True # False
В данном коде language
– это переменная, содержащая строку «chinese». Сравнение выполняется путем поочередного сравнения символов одной строки с символами другой строки.
В качестве результата оператор ==
возвращает True, а оператор !=
возвращает False, потому что сравниваемые строки одинаковые.
Теперь давайте сравним символы верхнего и нижнего регистра. Чтобы показать разницу между одинаковыми буквами в разных регистрах мы выведем их значения Unicode при помощи функции ord()
. Символы с меньшим значением Unicode имеют меньший размер, а символы с большим значением Unicode – больший.
print('chinese' == 'Chinese') # False print('chinese' > 'Chinese') # True print(ord('c')) # 99 print(ord('C')) # 67
Итак, в данном случае мы сравниваем символ «c» в слове «chinese» с символом «C» в слове «Chinese».
Как мы видим, строки «chinese» и «Сhinese» – не одно и то же. Поэтому после сравнения этих строк с помощью оператора ==
оператор print()
возвращает False . Выведя значения Unicode для «c» и «C», мы видим, что значение «C» (67) меньше, чем значение «c» (99). На этом сравнение прекращается, и выражение print('chinese' > 'Chinese')
возвращает True.
Мы получаем результат: «chinese» больше, чем «Сhinese», потому что первый символ в одном слове больше первого символа во втором.
[python_ad_block]
Сравнение строк другими операторами
Для сравнения строк в Python используются не только ==
и !=
. Как и при сравнении чисел, мы можем использовать операторы <
, >
, <=
и >=
.
string = 'chinese' string1 = 'china' print(string < string1) # False print(string > string1) # True print(string <= string1) # False print(string >= string1) # True
Мы присваиваем значение «chinese» для string
и «china» для string1
. Теперь сравним эти две строки с помощью операторов сравнения <
, >
, <=
, >=
.
После сравнения string
и string1
оператором <
мы получаем False. Первые четыре символа «chinese» и «china» идентичны. Однако пятый символ переменной string
– «е», в то время как пятый символ string1
– «а». Значение «e» в Юникоде равно 101, а «a» – 97. Таким образом, в результате сравнения этих переменных «chinese» оказывается больше, чем «china».
Сравнение строк с помощью is
Теперь давайте поговорим про сравнение строк с помощью оператора is
. Он работает следующим образом. Если две переменные указывают на один объект, оператор возвращает True, иначе — False.
Обратите внимание, что даже если обе строки имеют одинаковое значение, все равно может вернуться False
— если у сравниваемых объектов разные id
. Подробнее про разницу между операторами ==
и is
можно почитать в статье «Чем == отличается от is?».
Итак, рассмотрим следующий пример. Мы берем три строки: string1
, string2
, string3
. Переменной string1
мы присваиваем значение ['u', 'v', 'w']
. Переменную string2
приравниваем к string1
. string3
приравниваем к string1
, но не просто, а преобразовав в список string3 = list(string1)
, хотя, по сути, это и так список, т.е. значения не поменяются. А далее мы сравниваем строки операторами ==
и is
.
string1 = ['u', 'v', 'w'] string2 = string1 string3 = list(string1) print(string1 == string2) # True print(string1 == string3) # True print(string1 is string2) # True print(string1 is string3) # False print(id(string1)) # 139879412641216 print(id(string2)) # 139879412641216 print(id(string3)) # 139879412022144
Переменные string1
и string2
абсолютно идентичны и ссылаются на одни и те же объекты. Однако для string3
мы создали новый объект, и хотя значение string3
совпадает со значением string1
, они ссылаются на разные объекты.
Адреса объектов определяются с помощью функции id()
. Мы видим, что адреса объектов string3
и string1
действительно разные, в то время как адреса string2
и string1
совпадают.
Именно поэтому сравнение string1
и string2
обоими операторами возвращает True, поскольку они имеют не только одинаковое значение, но и одинаковый адрес.
Сравнение string1
и string3
оператором ==
дает True, а оператором is
дает False, так как значения совпадают, но объекты и их адреса — разные.
Сравнение введенных пользователем строк
Теперь рассмотрим ситуацию, когда мы получаем ввод от пользователя и выполняем различные операции сравнения с полученными данными .
Здесь мы берем три строковые переменные с именами str_1
, str_2
, str_3
. Значения str_1
и str_2
вводятся пользователем. Значение str_3
приравнивается к значению str_1
. Дальше мы сравниваем строки разными операторами сравнения: ==
, !=
, <=
,>=
.
str_1 = input('Enter the value of str_1: ') # Enter the value of str_1: chinese str_2 = input('Enter the value of str_2: ') # Enter the value of str_2: china str_3 = str_1 print(str_1 == str_2) # False print(str_1 != str_2) # True print(str_1 <= str_2) # False print(str_1 >= str_2) # True print(str_1 is str_2) # False print(str_1 is str_3) # True
Когда мы запускаем нашу программу, пользователя просят ввести значения str_1
и str_2
. После присвоения значений переменным эти строки сравниваются разными операторами.
Введенное значение str_1
– «chinese», а str_2
– «china». Сначала мы сравниваем эти строки с помощью оператора ==
. Поскольку значения не совпадают, мы получаем результат False. Затем мы сравниваем наши строки с помощью оператора !=
. Поскольку значения не совпадают, мы получаем результат True.
Дальше мы сравниваем строки с помощью оператора <=
. Поскольку str_1
больше str_2
, мы получаем True. И, в конце, мы используем is
для сравнения строк. str_1
и str_2
имеют разные значения и ссылаются на разные объекты, поэтому результат будет False. Значения str_2
и str_3
идентичны, а переменные ссылаются на один объект, поэтому мы получим True.
Заключение
В этой статье мы поговорили про сравнение строк в Python с помощью различных операторов: ==
, !=
, >
, <
, >=
и <=
. Вы узнали, как именно происходит сравнение, какие строки считаются большими, а какие — меньшими. Мы также разобрали, чем отличается применение ==
и is
, и показали разницу на примерах.
Надеемся, эта статья была вам полезна. Успехов в написании кода!
Перевод статьи «Python string comparison».
Сравнение лексических текстов
Code Compare обеспечивает различную глубину сравнения источников:
- Сравнение символов . В случае использования этой опции Code Compare выделяет каждый из различных символов. с определенным цветом, который можно установить в диалоговом окне «Параметры»;
- Пословное сравнение . Если выбран этот подход сравнения, сравниваются целые слова друг с другом;
- Построчное сравнение . Если вы выберете эту опцию, линии будут считаться разными, даже если они имеют только один другой символ.
Вы можете выбрать нужный подход в параметрах Code Compare.
Для выбора метода сравнения перейдите в меню Сравнение , выберите подменю Сравнить текст , а затем выберите нужный пункт меню.
Чтобы настроить режим сравнения по умолчанию, в Tools меню выберите Options , затем в появившемся диалоговом окне Options разверните узел Code Compare , перейдите на страницу File и установите необходимое значение в раскрывающемся списке Сравнить содержимое .
Реализация лексического сравнения для языков программирования
Лексическое сравнение поддерживается для следующих языков:
- C#
- С++
- Visual Basic
- JavaScript
- Ява
Лексическое сравнение активируется при выборе режима Символ за символом . Поскольку эта опция поддерживается только для некоторых языков, он отключен по умолчанию.
Преимущества такого сравнения можно увидеть на следующем примере.
Пример: обычное сравнение и лексическое сравнение
Пример ниже демонстрирует преимущества лексического сравнения по сравнению с обычным сравнением.
Режим сравнения текста в Code Compare может быть неудобен для сравнения исходного кода, так как он не распознает языковые элементы и внешний вид для одинаковых символов в совершенно разных лексемах.
Алгоритм сравнения обычного текста
При включенном лексическом сравнении разные типы лексем никогда не сравниваются друг с другом.
Лексическое сравнение — различные типы лексем
Инструмент сравнения кодов с включенным лексическим сравнением всегда сравнивает числа полностью. Это иллюстрирует следующий скриншот.
Сравнение чисел с текстовым режимом сравнения
Если вы выбираете текстовый режим сравнения, числа будут сравниваться поразрядно, что нерационально в контексте сравнения исходного кода.
Дополнительные параметры
Игнорирование комментариев можно включить в меню Сравнение .
При включении этой опции инструмент сравнения будет игнорировать любые комментарии к исходному коду и выделять блоки, отличающиеся этим знаком, только как неизмененные.
- Предыдущий
- Следующий
сравнить текст, сравнить текст онлайн
Выберите источник язык английскийболгарскийчешскийдатскийнемецкийгреческийиспанский эстонскийфинскийфранцузскийвенгерскийитальянскийяпонскийлитовскийлатышскийголландскийпольскийпортугальскийпортугальский (бразильский)румынскийрусскийсловацкийсловенскийшведскийшведскийкитайский
Импортировать с URL-адреса
Стандарт фактический СократитьСократить — это Премиум-функция
Сократите любое предложение с помощью оператора Сокращение.
РасширятьРасширение — функция Premium
Удлиняйте любое предложение с помощью оператора Expand.
ФормальныйОфициальный тон — это функция Premium
Сделайте любое предложение более официальным с помощью Formal Тон оператор.
ПовседневныйПовседневный оттенок — Премиум-функция
Сделайте любое предложение более непринужденным с помощью Casual Тон оператор.